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

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

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

我该留下还是该走?


当前回答

我更喜欢使用未选择的名词,它在英语中恰好是单数。

影响表名的数量会导致正交问题(正如许多其他答案所示),但选择这样做是因为表通常包含多行,在语义上也充满了漏洞。如果我们考虑一种基于大小写对名词进行屈折的语言(就像大多数语言一样),这一点就更明显了:

既然我们通常都在处理行,为什么不把名字放在宾格中呢?如果我们有一个写得比读得多的表,为什么不把这个名字放在与格中呢?这是一张桌子,为什么不使用属格呢?我们不会这样做,因为表被定义为一个抽象容器,无论其状态或用途如何,它都存在。在没有确切和绝对的语义原因的情况下影响名词是在胡言乱语。

使用未选择的名词是简单、逻辑、规则和语言独立的。

其他回答

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

我认为使用单数是我们在大学里学到的。但同时,您可能会认为,与面向对象编程不同,表不是其记录的实例。

我想我现在倾向于单数,因为英语中的复数不规范。在德语中,由于没有一致的复数形式,情况更糟——有时,如果没有前面的指定冠词(der/die/das),你就无法判断一个单词是否为复数。无论如何,在汉语中没有复数形式。

在寻找良好的命名惯例时,我应该如何命名会出现以下困惑:

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

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

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

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

AppUserGroup关系告诉哪些实体是AppUserGroups

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

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

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

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

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

我也会使用复数形式,对于前面提到的用户困境,我们确实采用了方括号方法。

我们这样做是为了在数据库体系结构和应用程序体系结构之间提供一致性,基本上理解为用户表是用户值的集合,就像代码工件中的用户集合是用户对象的集合一样。

让我们的数据团队和开发人员使用相同的概念语言(尽管不总是相同的对象名称),可以更容易地在他们之间传达想法。