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

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

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

我该留下还是该走?


当前回答

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

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

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

AppUserGroup关系告诉哪些实体是AppUserGroups

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

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

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

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

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

其他回答

实际上,我一直认为使用多个表名是一种流行的习惯。到目前为止,我一直使用复数。

我可以理解单数表名的论点,但对我来说,复数表名更有意义。表名通常描述表包含的内容。在标准化数据库中,每个表都包含特定的数据集。每一行都是一个实体,表中包含许多实体。因此,表名的复数形式。

一张汽车表上会有汽车的名字,每一排都是一辆汽车。我承认,以table.field的方式指定表和字段是最好的做法,使用单一的表名更容易阅读。然而,在以下两个例子中,前者更有意义:

SELECT * FROM cars WHERE color='blue'
SELECT * FROM car WHERE color='blue'

老实说,我将重新思考我在这件事上的立场,我将依赖于我正在开发的组织所使用的实际惯例。然而,我认为出于个人习惯,我将坚持使用复数表名。对我来说,这更有意义。

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

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

我不喜欢复数表名,因为英语中的一些名词是不可数的(水、汤、现金),或者当你使其可数时,其含义会发生变化(鸡vs鸡;肉vs鸟)。我也不喜欢使用表名或列名的缩写,因为这样做会给已经陡峭的学习曲线增加额外的斜率。

具有讽刺意味的是,我可能会将User作为一个例外,并将其称为User,因为User(Transac SQL),因为如果不需要的话,我也不喜欢在表周围使用括号。

我还喜欢将所有ID列命名为ID,而不是ChickenId或ChickenId(复数个家伙对此做什么?)。

这一切都是因为我对数据库系统没有适当的尊重,我只是在重新应用OO命名约定中的一个技巧,比如Java的习惯和懒惰。我希望有更好的IDE支持复杂的SQL。

我的看法是语义上的,这取决于您如何定义容器。例如,“一袋苹果”或简单的“苹果”或“苹果袋”或“apple”。

例子:“学院”表可以包含0个或多个学院“学院”表可以包含0个或多个学院

a "student" table can contain 0 or more students 
a table of "students" can contain 0 or more students.

我的结论是,两者都可以,但你必须定义你(或与之互动的人)在参考表格时将如何处理;“x表”或“xs表”

服务器本身的系统表/视图(SYSCAT.tables、dbo.sysindexes、ALL_tables、information_schema.columns等)几乎总是多个。我想为了保持一致,我会追随他们的脚步。