学术界认为,表名应该是存储其属性的实体的单数。
我不喜欢任何需要在名称周围加方括号的T-SQL,但我已经将一个Users表重命名为单数,这永远意味着使用该表的人有时不得不使用括号。
我的直觉是,保持单数更正确,但我的直觉也是,括号表示不需要的东西,比如列名中有空格等。
我该留下还是该走?
学术界认为,表名应该是存储其属性的实体的单数。
我不喜欢任何需要在名称周围加方括号的T-SQL,但我已经将一个Users表重命名为单数,这永远意味着使用该表的人有时不得不使用括号。
我的直觉是,保持单数更正确,但我的直觉也是,括号表示不需要的东西,比如列名中有空格等。
我该留下还是该走?
当前回答
单数的我不相信任何涉及最合乎逻辑的论点——每个人都认为自己的偏好最合乎逻辑。无论你做什么,这都是一团糟,只要选择一个惯例并坚持下去。我们正试图将一种语法和语义高度不规则的语言(正常的口语和书面语言)映射到一种具有非常特定语义的高度规则(SQL)语法。
我的主要论点是,我不认为表格是一个集合,而是一个关系。
因此,AppUser关系告诉哪些实体是AppUsers。
AppUserGroup关系告诉哪些实体是AppUserGroups
AppUser_AppUserGroup关系告诉AppUsers和AppUserGroups是如何关联的。
AppUserGroup_AppUserGroup关系告诉AppUserGroups和AppUserGroup是如何关联的(即组中的组成员)。
换句话说,当我想到实体以及它们是如何关联的时候,我想到的是单数的关系,但当然,当我想起集合或集合中的实体时,集合或集合是复数的。
在我的代码和数据库模式中,我使用单数。在文本描述中,为了提高可读性,我最终使用了复数形式,然后使用字体等将表/关系名称与复数形式区分开来。
我喜欢认为它是混乱的,但有系统的——这样,我想表达的关系总是有一个系统生成的名称,这对我来说非常重要。
其他回答
我更喜欢使用未选择的名词,它在英语中恰好是单数。
影响表名的数量会导致正交问题(正如许多其他答案所示),但选择这样做是因为表通常包含多行,在语义上也充满了漏洞。如果我们考虑一种基于大小写对名词进行屈折的语言(就像大多数语言一样),这一点就更明显了:
既然我们通常都在处理行,为什么不把名字放在宾格中呢?如果我们有一个写得比读得多的表,为什么不把这个名字放在与格中呢?这是一张桌子,为什么不使用属格呢?我们不会这样做,因为表被定义为一个抽象容器,无论其状态或用途如何,它都存在。在没有确切和绝对的语义原因的情况下影响名词是在胡言乱语。
使用未选择的名词是简单、逻辑、规则和语言独立的。
TABLE名称是表结构的一个定义。VIEW或QUERY名称是(一个或多个)表的视图或查询的一个定义。表格、视图或查询可能包含以下内容之一:
0条记录1条记录许多记录。
你到底为什么要在一个对象名称的末尾加一个“s”?将“s”放在对象名称的末尾,表示什么意思?
如果要区分,请添加“_tbl”。视图是“_vew”(而不是愚蠢的“_v”约定)。
最少3个字符的后缀-这会使讨论停止。
表是一个DB对象,与其他对象没有区别。
保存3个字符只会使意思清晰。
红色;-)
我们运行类似的标准,在编写脚本时,我们要求[]围绕名称,并在适当的情况下使用模式限定符-主要是为了防止SQL语法将来夺取名称。
SELECT [Name] FROM [dbo].[Customer] WHERE [Location] = 'WA'
这在过去拯救了我们的灵魂——我们的一些数据库系统从SQL 6.0到SQL 2005已经运行了10多年——远远超过了预期寿命。
就“标准”而言,其他人给出了相当好的答案,但我只是想补充一下。。。是否可能“用户”(或“用户”)实际上不是表中数据的完整描述?并不是说你应该对表名和特定性太着迷,但也许像“Widget_Users”(其中“Widget”是应用程序或网站的名称)这样的东西会更合适。
服务器本身的系统表/视图(SYSCAT.tables、dbo.sysindexes、ALL_tables、information_schema.columns等)几乎总是多个。我想为了保持一致,我会追随他们的脚步。