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

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

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

我该留下还是该走?


当前回答

指导方针确实如此。这不是“板上钉钉”,这就是为什么你可以选择忽略它们。

我想说,使用多个表名在逻辑上更直观。表毕竟是实体的集合。除了提到的其他选项,我通常在表名上看到前缀。。。

tbl用户tbl此待定tbl其他

我并不是建议这样做,我也看到表名中使用了很多空格,我对此深恶痛绝。我甚至遇到过带有白痴字符的域名,比如?好像说这个字段回答了一个问题。

其他回答

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

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

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

单数的我不相信任何涉及最合乎逻辑的论点——每个人都认为自己的偏好最合乎逻辑。无论你做什么,这都是一团糟,只要选择一个惯例并坚持下去。我们正试图将一种语法和语义高度不规则的语言(正常的口语和书面语言)映射到一种具有非常特定语义的高度规则(SQL)语法。

我的主要论点是,我不认为表格是一个集合,而是一个关系。

因此,AppUser关系告诉哪些实体是AppUsers。

AppUserGroup关系告诉哪些实体是AppUserGroups

AppUser_AppUserGroup关系告诉AppUsers和AppUserGroups是如何关联的。

AppUserGroup_AppUserGroup关系告诉AppUserGroups和AppUserGroup是如何关联的(即组中的组成员)。

换句话说,当我想到实体以及它们是如何关联的时候,我想到的是单数的关系,但当然,当我想起集合或集合中的实体时,集合或集合是复数的。

在我的代码和数据库模式中,我使用单数。在文本描述中,为了提高可读性,我最终使用了复数形式,然后使用字体等将表/关系名称与复数形式区分开来。

我喜欢认为它是混乱的,但有系统的——这样,我想表达的关系总是有一个系统生成的名称,这对我来说非常重要。

我只是说说我为什么用单数名。

例如,我需要从用户处获取所有字段:

-- Select every fields from 'user' table
SELECT * FROM user

我需要21岁用户的姓名:

-- Select every fields from 'user' table which have 21 years old
SELECT * FROM user WHERE age = '21'

当然,复数形式也可以用同样的方式,但对于我的大脑来说,我真的认为这是正确的方式。

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

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

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

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

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

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

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

我坚信,在实体关系图中,实体应该用一个单数名称来反映,类似于类名是单数。实例化后,名称将反映其实例。因此,对于数据库,当实体被制成表(实体或记录的集合)时,它是复数。实体,用户被制成表用户。我同意其他人的建议,也许User这个名字可以改为Employee,或者更适合您的场景。

这在SQL语句中更有意义,因为您正在从一组记录中进行选择,如果表名是单数,则读起来不好。