学术界认为,表名应该是存储其属性的实体的单数。

我不喜欢任何需要在名称周围加方括号的T-SQL,但我已经将一个Users表重命名为单数,这永远意味着使用该表的人有时不得不使用括号。

我的直觉是,保持单数更正确,但我的直觉也是,括号表示不需要的东西,比如列名中有空格等。

我该留下还是该走?


当前回答

我有同样的问题,在阅读了这里的所有答案后,我肯定会选择SINGULAR,原因如下:

原因1(概念)。你可以把装苹果的袋子想象成“苹果袋”,不管是装0个、1个还是100万个苹果,都是同一个袋子。表只是容器,表名必须描述它包含的内容,而不是它包含多少数据。此外,复数概念更多地是关于口语的一个(实际上是为了确定是否有一个或多个)。

原因2。(方便)。用单数名字比用复数名字更容易。对象可以有不规则的复数形式,也可以完全没有复数形式,但总是有单数形式(新闻等少数例外)。

顾客顺序使用者地位消息

原因3。(美学和秩序)。特别是在主细节场景中,这读起来更好,按名称排列更好,逻辑顺序更高(主细节优先,细节第二):

1.订单2.订单详情

对比:

1.订单详情2.订单

原因4(简单)。把所有这些放在一起,表名、主键、关系、实体类。。。最好只知道一个名称(单数),而不是两个名称(单一类、复数表、单数字段、单数复数主细节…)

顾客客户.CustomerID客户地址公共类客户{…}从客户选择CustomerID=100

一旦你知道你是在和“客户”打交道,你就可以确定你会对所有的数据库交互需求使用同一个词。

原因5。(全球化)。世界越来越小,你可能有一个不同国籍的团队,但不是每个人都以英语为母语。对于非英语母语的程序员来说,想到“存储库”比想到“存储”更容易,或者想到“状态”而不是“状态”。使用单数名称可以减少因拼写错误导致的错误,不必思考“是孩子还是孩子?”,从而节省时间,从而提高生产力。

原因6。(为什么不呢?)。它甚至可以节省你的写作时间,节省你的磁盘空间,甚至让你的电脑键盘更耐用!

选择客户.CustomerName FROM Customer WHERE Customer.CustomerID=100选择Customers.CustomerName FROM Customers WHERE Customers.CustomerID=103

您已保存了3个字母、3个字节和3次额外的键盘点击:)

最后,你可以说出那些用保留名搞乱的名字,比如:

用户>LogiUser、AppUser、SystemUser、CMSUser,。。。

或者使用臭名昭著的方括号[User]

其他回答

正如其他人在这里提到的,约定应该是一种工具,可以增加易用性和可读性。不是用来折磨开发者的枷锁或俱乐部。

也就是说,我个人倾向于对表和列使用单数名称。这可能来自我的编程背景。类名通常是单数,除非它们是某种集合。在我的脑海中,我正在存储或读取相关表中的单个记录,所以单数对我来说是有意义的。

这种做法还允许我为那些在对象之间存储多对多关系的表保留多个表名。

我也尽量避免在表和列名中使用保留字。在这里所讨论的情况下,违背用户的单一约定更有意义,以避免需要封装使用User的保留字的表。

我喜欢以有限的方式使用前缀(tbl表示表名,sp_表示进程名等),尽管许多人认为这会增加混乱。与下划线相比,我更喜欢CamelBack名称,因为我在键入名称时总是按+而不是_。许多人不同意。

下面是命名约定指南的另一个好链接:http://www.xaprb.com/blog/2008/10/26/the-power-of-a-good-sql-naming-convention/

请记住,您的惯例中最重要的因素是,它对与所讨论的数据库交互的人来说是有意义的。在命名惯例方面,没有“一个戒指来统治所有人”。

这可能有点多余,但我建议谨慎行事。重命名表不一定是坏事,但标准化就是这样;一个标准——这个数据库可能已经被“标准化”了,无论多么糟糕:)——我建议一致性是一个更好的目标,因为这个数据库已经存在,而且它可能不仅仅由两个表组成。

除非您能够标准化整个数据库,或者至少计划为此目的而努力,否则我怀疑表名只是冰山一角,专注于手头的任务,忍受命名不好的对象的痛苦,可能符合您的最大利益--

实际一致性有时是最佳标准…:)

my2内容---

表格:复数

用户表中列出了多个用户。

型号:单数

可以从用户表中选择单个用户。

控制器:复数

http://myapp.com/users将列出多个用户。

无论如何,这是我的看法。

如果我们查看MS SQL Server的系统表,Microsoft指定的表名是复数。

Oracle的系统表以单数形式命名。尽管其中有几个是复数。Oracle建议用户定义的表名使用复数。他们推荐一件事而遵循另一件事,这没有多大意义。这两个软件巨头的架构师使用不同的约定来命名他们的表,这也没有多大意义。。。毕竟,这些家伙是什么。。。博士学位?

我记得在学术界,这项建议是独一无二的。

例如,当我们说:

select OrderHeader.ID FROM OrderHeader WHERE OrderHeader.Reference = 'ABC123'

也许b/c每个ID都是从特定的单行中选择的。。。?

我在之前的任何回答中都没有看到这一点。许多程序员在处理表时没有正式的定义。我们经常以“记录”或“行”的形式直观地交流。然而,除了一些非规范化关系的例外,表通常被设计为使得非键属性和键之间的关系构成集合论函数。

函数可以定义为两个集合之间的叉积的子集,其中键集合的每个元素在映射中最多出现一次。因此,从这个角度产生的术语往往是单数。在涉及函数的其他数学和计算理论(例如代数和lambda演算)中,人们可以看到相同的单数(或至少是非复数)约定。