学术界认为,表名应该是存储其属性的实体的单数。
我不喜欢任何需要在名称周围加方括号的T-SQL,但我已经将一个Users表重命名为单数,这永远意味着使用该表的人有时不得不使用括号。
我的直觉是,保持单数更正确,但我的直觉也是,括号表示不需要的东西,比如列名中有空格等。
我该留下还是该走?
学术界认为,表名应该是存储其属性的实体的单数。
我不喜欢任何需要在名称周围加方括号的T-SQL,但我已经将一个Users表重命名为单数,这永远意味着使用该表的人有时不得不使用括号。
我的直觉是,保持单数更正确,但我的直觉也是,括号表示不需要的东西,比如列名中有空格等。
我该留下还是该走?
当前回答
没有要求表名为单数的“约定”。例如,我们在一个评级过程使用的数据库中有一个名为“REJECTS”的表,其中包含了一次运行程序时被拒绝的记录,我看不出任何理由不使用复数形式来表示该表(将其命名为“REJECT”会很有趣,或者过于乐观)。关于另一个问题(引号),它取决于SQL方言。Oracle不要求在表名周围加引号。
其他回答
我是单数表名的粉丝,因为它们使用CASE语法使我的ER图更容易阅读,但通过阅读这些响应,我感到它从未很好地被理解?我个人很喜欢它。这里有一个很好的概述,举例说明当你使用单数表名,在你的关系中添加动作动词,并为每一种关系形成好句子时,你的模型是多么可读。对于一个20表的数据库来说,这有点过分了,但是如果您有一个包含数百个表的数据库,并且设计复杂,如果没有一个可读性好的图表,您的开发人员将如何理解它?
http://www.aisintl.com/case/method.html
至于表和视图的前缀,我绝对讨厌这种做法。在给一个人提供可能不好的信息之前,不要给他任何信息。任何浏览数据库查找对象的人都可以很容易地将表与视图区分开来,但如果我有一个名为tblUsers的表,出于某种原因,我决定在将来将其重组为两个表,并使用一个视图统一它们,以防破坏旧代码,那么我现在有一个名称为tblUser的视图。此时,我只剩下两个没有吸引力的选项:留下一个带有tbl前缀的视图,这可能会让一些开发人员感到困惑,或者强制重写另一个层(中间层或应用程序),以引用我的新结构或名称viewUsers。这否定了IMHO视图的大部分价值。
我们运行类似的标准,在编写脚本时,我们要求[]围绕名称,并在适当的情况下使用模式限定符-主要是为了防止SQL语法将来夺取名称。
SELECT [Name] FROM [dbo].[Customer] WHERE [Location] = 'WA'
这在过去拯救了我们的灵魂——我们的一些数据库系统从SQL 6.0到SQL 2005已经运行了10多年——远远超过了预期寿命。
在寻找良好的命名惯例时,我应该如何命名会出现以下困惑:
1) 根据桌子上的东西用户表。它总是复数形式。所以,用户
2) 根据记录的内容用户表中的记录将是单个用户。SO,用户。
现在,主要是用户角色的问题。情况1:根据第一命名约定,users_roles此名称的含义、用户及其角色。
案例2:根据第二种命名约定,user_role这个名字意味着什么,用户和他的角色。
良好的命名约定是提供实体关系的额外概念,尤其是当存储多对多关系时。
在这里,根据场景,我们应该确定为一组信息。
在用户表中,形成的所有集合都是唯一的用户。在“角色”表中,形成的所有集合都是唯一的角色。在用户和角色关系表中,可以用不同的角色组成用户集,这给出了存储1个任意关系的概念。
I would prefer,
Users table => user
Roles table => role
users role relationship table => user_roles
我只对拼写相同的表名使用名词,无论是单数还是复数:
驼鹿鱼鹿飞机你内裤短裤眼镜剪刀种孩子
如果我们查看MS SQL Server的系统表,Microsoft指定的表名是复数。
Oracle的系统表以单数形式命名。尽管其中有几个是复数。Oracle建议用户定义的表名使用复数。他们推荐一件事而遵循另一件事,这没有多大意义。这两个软件巨头的架构师使用不同的约定来命名他们的表,这也没有多大意义。。。毕竟,这些家伙是什么。。。博士学位?
我记得在学术界,这项建议是独一无二的。
例如,当我们说:
select OrderHeader.ID FROM OrderHeader WHERE OrderHeader.Reference = 'ABC123'
也许b/c每个ID都是从特定的单行中选择的。。。?