完全复制
Table Naming Dilemma: Singular vs. Plural Names
号
使用单数或复数数据库表名更好吗?有公认的标准吗?
我听过支持和反对的论据,你们觉得呢?
- 当关闭"精确复制"时,不应提供链接?我在"相关"中看到它,但我仍然认为mods应该通过编辑问题或以表单形式提供链接。
- 简而言之,所有的答案都是:"复数是因为表是一堆一件事",单数是因为表本身是一件事,不必包含一堆东西"。这是一个无意义的观点,"一致"是最佳实践。
- 好的,这是旧的,但是…如果在表中有一个唯一的/自动递增的主键(用于关系目的),请将表名设为单数。如果行中没有唯一的实体(具有重复项的表),请使用复数。现在您知道,某个表与另一个表之间存在唯一关系,而另一个表只包含许多不唯一或不唯一的记录。
- 复数。使用袜子抽屉示例。你不会让别人去从装满袜子的抽屉里给你拿一只袜子。当你从袜子抽屉里要一只袜子时,你实际上是在说。去从袜子抽屉里给我拿一只袜子。别让我们平常的懒惰话搞混了。
- @jameswilson"数据库,从我的满桌客户中给我一个客户"—现实的DBA/程序员引用
单数,所以你可以有:
等。
- 绝对是独一无二的。+ 1
- 客户地址,客户地址音频轨:)
- +1表示单数。使用它们的代码肯定会使用单数来表示类名,我喜欢用我的名字来匹配相同的东西。
- @RussCam:对不起,除了这听起来很糟糕之外,表中存储的实体是一个"客户服装"。其中可以有多个是固有的事实,不需要在表名中反映出来。
- 复数:客户。客户服装、客户服装和旅行。你不会把每个词都复数,只是宾语名词。
- 他为什么选择复数作为最好的答案?表名应为单数。客户…它是有许多客户记录的客户表。复数没有任何意义。有一个表,比如用户,然后有一个主要的auto inc用户u id/用户u id,这也是没有意义的。将是表用户。用户ID…对我来说最有意义。我经常做复数,直到我意识到复数作为一个表名是没有意义的。想想"select*from customer table where customer_id=1"其中"select*from customers table where customer_id=1"。
- 正如前面的评论所指出的:复数只会引起混乱。保持简单:单一。btw@russcam:这不是客户地址auditstrails吗?:)
- @瓦伦蒂诺夫兰肯关闭。从语法上来说,它是CustomersAddressesAuditTrials技术上的客户地址,Audit保持单数,但Trials确实是复数。有趣的是,3个不同的人用"trails"拼错了"trials"。D
- @实际上,只有一个人把"审计跟踪"和"审计审判"拼错了……;)
- @说真的,什么是审计审判?:)
- 强迫症是唯一一个好的理由,我可以看到使用单数-但这是一个非常好的一个。我讨厌他们的桌子因为复数而失去秩序。不过,我也讨厌以东十一〔三〕!废话!=)
- @强迫症是强迫症吗?这就是谷歌给我的。
- 是的,强迫症。
- 单数。这就是我从大学教授那里学到的。
imho,表名应该像客户一样是复数。
如果类名映射到customers表中的一行,则类名应该像customer一样是单数。
- 完全正确。
- 一个小小的警告/建议-如果名字由几个词组成,你应该在有语言意义的地方用复数形式,而不仅仅是整个词。下面举一个例子,我将使用:客户客户定制服装(它是多个地址)客户定制服装审核跟踪(地址保持复数,因为它是应用于客户定制服装的审核跟踪)
- 尽管实体包含集合,但表仍然是单个实体。我想得越多,用复数形式表示的表名就越没意义。
- 多个表名是多余的!
- 尤德:你是英国人吗,也许?-)
- 我是半个加拿大人,这让我有点像美式英语,但不是英式英语。是什么让你疑惑?
- 请不要介意人们告诉您采用某种风格,最好是定义您自己的风格,并且通常遵循您使用的语言、工具、IDE和框架的实践。
- @阿兹德-没错。接受与否取决于其他人。
- 加上imho:……为这件事投了这么多的赞成票和反对票。
- 约德:在英国英语中,集体目标通常是语法上的复数形式,例如"委员会不能同意"与"美国英语"的对比"委员会不能同意"。所以我假设一个英国人可能更愿意用一个单数名词来收集东西。
- 我觉得复数更容易读。SQL更像是英语……从first name='jamie'会说我要从名字为jamie的客户池中选择*的客户。包含多个客户,可以返回多个客户。使其成为复数
- 复数名称只是让它变得复杂,你需要添加语法到你的编程技能!加号是多余的。爱@jonhopkins的例子,讽刺的是,"hopkins"在我看来像是复数名称:)
- 表是一组记录。一个集合总是以单数形式命名:用户集,而不是用户集;数字集,而不是数字集;袜子集,而不是袜子集。如果您有一个用户记录集合,那么您就有一个用户记录表。您没有用户记录的用户表。表应该命名为user,因为它是user表。
- 我同意。有的时候常识、意义和方便比遵循所谓的"标准"要好。基本上,表是客户的集合,所以必须是复数。你会叫什么…"菜单标题中的"设置"或"设置"、"选项"或"选项"?
- @friendlydev听起来像是你在争论我们给所有的表都这样命名:customerset、orderset、productset等等。=我要么说"数字",要么说"数字集",但引用一组数字时我从不说"数字"。
- @里奇C:但是你提到数字表时会说"数字"。这就是为什么你说"袜子抽屉"而不是"袜子抽屉"的原因。在所有这些情况下,您要做的是为容器命名。您没有给容器内的项目命名。表是单个容器,所以您给它一个单数名称,因为您是以单数形式引用它。不管怎样,出于某种原因,我不再在乎了。如果你愿意,把你的表命名为"数字"。看看我是否在乎。哈!…等等。别这样,求你了。请不要。
- @Friendlydev是的,但是你总是在它的末尾添加一些东西,因为它使用了单一的版本。所以,是的,我完全同意你的观点,如果我把后缀表添加到它的末尾,比如number table或socktable,那是有意义的,但我不是,它只是袜子和数字,而不是袜子和数字。我看到使用单数的唯一好理由(这是一个好理由),是因为提姆·罗宾逊的回答,而不是因为它在语法上是正确的,就像你在争论一样。:)
- @里奇C:是的,但是。但你不必在最后说"桌子",因为它是一张桌子。尼纳·尼纳·尼纳。
- @你能把我的红袜子从袜子里拿出来吗?(我不必说抽屉,因为它是抽屉)=
- @里奇:这个怎么样?你有50个抽屉。它们都是根据其内容进行组织和标记的。我开始发出命令:去从宝石中取出10个最大的钻石。现在,从玩具里随机取出一台消防车。最后,把袜子里的红袜子拿出来。
我喜欢单数,但似乎是少数。
- 是的,我们是:)+1
- 我和你在一起,但不是因为我喜欢他们——只是因为我们几乎所有人都是独一无二的
- 我改变立场了。我和你在一起是因为这是一件事情的名字。您可以从一个小部件表中选择多个小部件,但是表本身不是小部件——它只是包含它们。
- 我和你在一起,我从不喜欢语法,单数比较容易。
- 我不明白它是怎样的少数:1号答案是复数,2-4号是单数。单数形式的总投票数远高于复数形式的总投票数。答案2的投票数高于答案1的投票数。表名应为单数。客户表包含所有客户的名称,它之所以称为客户表,是因为它的名称是"客户",而不是"客户"。
我的个人理念是使用复数数据库表名是多余的,除非您只计划表包含一行。
- select*from customer对我来说似乎"语法上"不正确…
- @阿恩谢:但是当你想到你用伪代码说的"获取表中所有部分的客户"也没有意义。
- 不要编写T-SQL,使用LINQ和映射:返回db.customers
- @但是,Arnsheac从customers inner join managers中选择"*",其中customers.managerID=managers.id也不太好阅读。
我喜欢使用像agentid这样带有pk名称的agent这样的单数名称。
但那只是我:o)
我喜欢使用复数形式,只是因为一个表包含多个实体,所以我觉得这更自然。
在创建数据实体时,Linq to SQL将复数形式的表名转换为单数形式。我假设,如果微软认为表名的复数形式是错误的做法,他们就不会实现这个功能。
- 所以所有其他事物都应该是复数形式的?"我上了公共汽车,拿出一盒面巾纸,往鼻子上喷满了装满绿色物质的鼻涕。
- 不,你要上一辆公共汽车。但是,如果您在一个Busses表中存储多个总线,那么表名应该是复数。尽管它实际上包含多个总线,但是将表称为"总线"是没有意义的。
- 嗯,我们能用鼻子做同样的例子吗?
- @nestor:一个鼻作为数据实体,一个表中有几个鼻。恐怕看不到问题所在。
- 只是有点幽默,我想这个单数和复数应该更像是PC和Mac,开源和微软……,我想这取决于每个人。我和奇瑞呆在一起。
- @内斯特:看到计算机只计算0和1是有意义的;-)
- @STW…解释得很好!对!没错,把钉子打在头上。
在我现在的公司里,我们用复数形式表示表名。原因是:如果我们有一个客户表,我们将每一行视为客户,那么表本身就是客户的集合。
- 但是桌子本身就是顾客吗?这不是一张顾客桌吗?
- 所以,我将有一个类牙齿,从一个表牙齿读取,并有属性牙齿。thootid,映射到牙齿。thootid…在我看来更像语法课而不是编程
显然,您的数据库表名必须以一种"标准"的方式命名,到目前为止我将任意定义这种方式。
首先,所有表名都应加上前缀"T"。在此之后,studlycaps中的单一实体名称,例如"客户"。随后,应立即包含模式第一版中为历史目的创建的列数,后跟下划线,以及数据的精确正常形式;对于BCNF,可以是"1"、"2"、"3"或"b"。任何较高的正常形式均应以"P"表示。
可接受名称的一些示例包括:
1 2 3
| t_Customer_6_3
t_Order_5_B
t_OrderLine_4_2 |
我想我的观点是,只要名字是合理的描述性的,并且命名是一致的,这真的没关系。
- 如果这是Slashdot,我会说+5有趣…
- 这是董事会最差劲的职位。把你那些愚蠢的前缀放进去。在我从事这个行业的几年里,我遇到过许多这种愚蠢的加密方法。用简单的英语为表命名。如果你不能想出一个简单的名字,那么你的设计仍然需要工作。把那些愚蠢的符号塞进太阳不发光的地方。它们增加了复杂性和成本,没有带来任何好处。
- 为机智而上扬,用粗体突出你的观点。即便如此,还是有人错过了…
最重要的是在使用中保持一致。记住哪些表是复数,哪些表不是复数,这很烦人。和你的域名一样,选择一个体育场并使用它。不要让贫穷的开发人员决定这个表是否使用person-id或personid或peopleid或person$id等。当您没有标准试图记住哪个表使用什么时,您可以浪费大量的时间,这是令人惊讶的。
没有应该或必须这样或那样的正确答案这个问题。这取决于数据库和软件的设计者。
对于我来说,当我做E-R图时,我通常使用单数形式的名称,因为我有一个实体客户,而不是客户,所以我保持不变,以免混淆。
当然,有些框架确实支持某种样式,所以当您注意到它们时,最好遵循这些实践。
每个问题都有很多论据,但归根结底就是你觉得舒服的地方。两者都不是错的。
真正重要的是你要始终如一。选择一个标准并坚持下去,你选择的那个标准不那么重要。
- 标准是至关重要的,这是一个可以从中受益的领域。你的论点存在的问题是,同一家公司的不同集团可以想出他们自己的"一致"意见。我一直在看。如果没有其他的事情,有一个约定可以节省你的时间,不必在会议上争论或者在网上寻找一些指导,就像每个阅读过这篇文章的人一样。如果有一个真正的标准的话,我可以在20分钟内完成实际的编码工作。
- @德拉雷1:是的,如果有标准的话会很好,但是没有。这不是我的论点的问题,这是缺乏标准的问题,我的答案对此无能为力。所以,你对我的答案投了反对票,因为它指出了一个事实,只是因为你不喜欢这个事实?抱歉,你的否决也不会改变事实。
- 为什么投反对票?如果你不解释你认为错误的是什么,它就不能改善答案。
- 这个评论比无用更糟糕。关于这个问题有很多的意见,但是仅仅说"任何对你有用的东西"就浪费了对这个问题有真正兴趣的人的时间。除此之外,这是错误的。一个除法选择一个复数标准,它成为该除法的"标准",另一个选择单数,它成为该除法的"标准"。然后,当大数据出现并试图合并整个公司的数据时,你就有了一个巨大的混乱需要清理。
- @德拉雷1:似乎是你对答案的解释让你做出了反应,而不是答案本身。你所说的答案实际上根本不在答案中。此外,如果您要合并数据,并且不同的表命名方式是您最大的问题,那么您是非常幸运的。
像许多这样的问题一样,最好的答案往往是"一致的"。您可以争辩表代表一个单独的实体,因此它应该有一个单独的名称,或者它包含一个实体的多个实例,所以它应该是复数。我的建议是抛开一个硬币,并将其用于整个数据库(或坚持已经占多数的惯例)。
imho这并不重要,只要做你和那些使用数据库的人都觉得舒服的事情就行了。
我想我下意识地用s和"选择列表"或外键表和单数形式列出了主要数据表。