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

我不喜欢任何需要在名称周围加方括号的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]

其他回答

我有同样的问题,在阅读了这里的所有答案后,我肯定会选择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]

没有要求表名为单数的“约定”。例如,我们在一个评级过程使用的数据库中有一个名为“REJECTS”的表,其中包含了一次运行程序时被拒绝的记录,我看不出任何理由不使用复数形式来表示该表(将其命名为“REJECT”会很有趣,或者过于乐观)。关于另一个问题(引号),它取决于SQL方言。Oracle不要求在表名周围加引号。

我们运行类似的标准,在编写脚本时,我们要求[]围绕名称,并在适当的情况下使用模式限定符-主要是为了防止SQL语法将来夺取名称。

SELECT [Name] FROM [dbo].[Customer] WHERE [Location] = 'WA'

这在过去拯救了我们的灵魂——我们的一些数据库系统从SQL 6.0到SQL 2005已经运行了10多年——远远超过了预期寿命。

我总是使用单一的表名,但正如前面所述,最重要的是保持一致,并对所有名称使用相同的形式。

我不喜欢多个表名,因为组合的名称可能会很奇怪。例如,如果您有一个名为Users的表,并且您想存储用户的财产,那么这将导致一个名称为UsersProperties的表。。。

单数的我会将包含一组用户行表示对象的数组称为“用户”,但该表是“用户表”。国际海事组织认为,表只是它所包含的一组行,这是错误的;表是元数据,行集是分层地附加到表的,而不是表本身。

当然,我一直使用ORM,用多个表名编写的ORM代码看起来很愚蠢,这有助于提高效率。