单数还是复数数据库表名? [复制]

Posted

技术标签:

【中文标题】单数还是复数数据库表名? [复制]【英文标题】:Singular or plural database table names? [duplicate] 【发布时间】:2010-10-22 23:31:07 【问题描述】:

完全重复

Table Naming Dilemma: Singular vs. Plural Names

使用单数或复数数据库表名更好吗?有公认的标准吗?

我听到了支持和反对它的论点,你们怎么看?

【问题讨论】:

关闭“完全重复”时不应该提供链接吗?我在“相关”中看到它,但我仍然认为模组应该通过编辑问题或以表格形式提供链接。 简而言之,这里有所有答案:“复数,因为桌子是一堆东西”和“单数,因为桌子本身是一物,没有必须包含一堆东西”。这是一个有争议的问题; “一致”是最佳做法。 好的,这很旧,但是...如果您在表中有一个唯一/自动递增的主键(出于关系目的),请将表名设为单数。如果行中没有唯一实体(有重复的表),请使用复数。现在您知道某个表与仅包含许多不唯一或不不同记录的另一个表具有唯一关系。 复数。使用袜子抽屉示例。你不会告诉别人从装满袜子的抽屉里给你拿一只袜子。当你从袜子抽屉里索要袜子时,你实际上是在说。去袜子抽屉里给我拿一只袜子。不要让我们常见的懒惰言论混淆。 @JamesWilson “数据库,从我满是客户的桌子上给我找一个客户” - 现实的 DBA/程序员报价 【参考方案1】:

与许多此类问题一样,最佳答案通常是“一致的”。您可以争辩说该表表示单个实体,因此应该使用单数名称,或者它包含一个实体的多个实例,因此它应该是复数。我的建议是掷硬币并为整个数据库使用它(或坚持已经占多数的约定)。

【讨论】:

【参考方案2】:

恕我直言,表名应该是复数,如客户。

如果类名映射到 Customers 表中的一行,则类名应该像 Customer 一样是单数的。

【讨论】:

绝对正确。 一个轻微的警告/建议 - 如果名称包含多个单词,您应该在其具有语言意义的地方进行复数,而不仅仅是整个事情。从下面举一个例子,我会使用:Customers CustomerAddresses(它是多个地址) CustomerAddressesAuditTrail(地址保持复数,因为它是适用于 CustomerAddresses 的审计跟踪) 一个表仍然是一个单一的实体,尽管该实体包含一个集合。我想得越多,复数表名的意义就越小。 复数表名是多余的! Yooder:在英式英语中,集体宾语在语法上通常是复数形式,例如,“委员会无法达成一致”与美式英语“委员会无法达成一致”。所以我假设英国人可能更愿意使用单数名词来表示事物的集合。【参考方案3】:

每个都有很多论据,但归根结底都是你觉得舒服。两者都没有错。

真正重要的是你始终如一。选择一种标准并坚持下去,您选择的标准并不重要。

【讨论】:

标准至关重要,这是一个可以从中受益的领域。你的论点的问题在于,同一家公司的不同群体可以提出他们自己品牌的“一致”公约。我总是能看到它。如果不出意外,召开会议可以节省您在会议中争论或上网寻求指导的时间,就像每个阅读这篇文章的人所做的那样。如果有一个真正的标准,我本可以在 20 分钟内完成实际编码。 @DRAirey1:是的,如果有标准就好了,但没有标准。这不是我的论点的问题,而是缺乏标准的问题,我的回答对此无能为力。所以,你否决了我的回答,因为它指出了一个事实,只是因为你不喜欢这个事实?抱歉,您的反对票也不会改变事实。 为什么投反对票?如果你不解释你认为错的地方是什么,就无法改进答案。 这条评论比没用还糟糕。关于这个主题有很多意见,但是仅仅说“任何对你有用的东西”只会浪费一个对这个主题真正感兴趣的人的时间。除此之外,这是错误的。一个部门选择复数标准并成为该部门的“标准”,另一个部门选择单数并成为该部门的“标准”。然后,当大数据出现并尝试合并整个公司的数据时,您需要清理大量混乱。 @DRAirey1:似乎是您对答案的解释,而不是答案本身。您所说的答案实际上根本不在答案中。此外,如果你要合并数据,而不同的表命名方式是你最大的问题,那么你很幸运。【参考方案4】:

嗯,显然您的数据库表名绝对必须以我将任意定义的“标准”方式命名。

首先,所有表名都应以“t_”为前缀。在此之后,StudlyCaps 中的单数实体名称,例如“顾客”。紧接着,这应包含在模式的第一个版本中创建的列数,出于历史目的,后跟下划线,以及数据的精确范式; BCNF 为“1”、“2”、“3”或“B”。任何更高的范式都应用“P”表示。

一些可接受的名称示例如下:

t_Customer_6_3
t_Order_5_B
t_OrderLine_4_2

我认为我的意思是,真的没关系,只要名称具有合理的描述性并且命名一致即可。

【讨论】:

如果这是 slashdot,我会说 +5 有趣... 这是板上最蹩脚的帖子。把你愚蠢的前缀塞进去。在我从事这项业务的这些年里,我遇到了许多这些愚蠢的加密方法。用简单的英语为表格命名。如果你不能想出一个简单的名字,那么你的设计仍然需要工作。并在没有阳光的地方填充愚蠢的符号。它们增加了复杂性和成本,而且没有任何好处。 为机智点赞,并用 bold 突出您的观点。而且,即便如此,还是有人错过了……【参考方案5】:

对于这个问题,没有应该或必须是这样或那样的正确答案。这取决于数据库和软件的设计者。

对于我来说,我通常使用单数名称,因为当我做 E-R 图时,我有一个实体 Customer,而不是 Customers,所以我保持不变以免混淆。

当然,有些框架确实偏爱一种风格或另一种风格,所以当你注意到它们时,最好遵循这些做法。

【讨论】:

【参考方案6】:

最重要的是在使用中保持一致。必须记住哪些表是复数形式,哪些不是复数形式,这很烦人。与您的字段名称相同,选择一个标准并使用它。不要让可怜的开发人员必须确定该表是否使用 person_id 或 personid 或 peopleid 或 person$id 等。当您没有标准试图记住哪个表使用时,您可以浪费的时间量是惊人的什么。

【讨论】:

【参考方案7】:

在我目前的公司,我们使用复数作为表名。推理是这样的:如果我们有一个客户表,我们认为每一行都是客户,所以表本身就是客户的集合。

【讨论】:

但是桌子本身是客户吗?不是客户表吗? 所以,我将有一个类 TOOTH,它从表 TEETH 中读取数据,并具有映射到 TEETH.THOOTID 的属性 TOOTH.THOOTID...在我看来更像是语法类而不是编程【参考方案8】:

恕我直言,这并不重要,只要对您和使用数据库的人感到满意即可。

我想我下意识地用 s 和“pick list”或外键表和单数列出主要数据表。

【讨论】:

【参考方案9】:

我喜欢单数的名字,但似乎是少数。

【讨论】:

我和你在一起,但不是因为我喜欢他们——只是因为我们几乎所有人都是独一无二的 我正在改变立场。我和你在一起,因为它是单一事物的名称。您可以从一个小部件表中选择多个小部件,但该表本身不是小部件——它只是包含它们。 我和你在一起,我从不喜欢语法,单数更容易。 我不明白为什么是少数:第 1 个答案是复数,第 2-4 个答案是单数。单数的总票数远高于复数的总票数。答案编号 2 的投票计数高于编号 1。表格名称应为单数。 customer 表保存了所有客户的姓名,之所以称为 customer 表,是因为它的名称是“customer”,而不是“customers”。【参考方案10】:

单数,所以你可以有:

客户 客户地址 CustomerAddressAuditTrail

等等

【讨论】:

CustomersAddresses, CustomersAddressesAuditTrails :) +1 表示单数。使用它们的代码肯定会使用单数作为类名,我喜欢我的名字来匹配相同的东西。 @Russ Cam:抱歉,除了这听起来很糟糕之外,表存储的实体是“CustomerAddress”。可以有多个是与生俱来的,不需要在表名中体现出来。 复数:Customers.. CustomerAddresses, CustomerAddressAuditTrails.. 你不会每个单词都复数,只是宾语名词 他到底为什么选择复数名字作为最佳答案?表名应该是单数。客户...它的客户表有许多客户记录。复数只是没有任何意义。有一个表也没有意义,比如用户然后有主自动公司 user_id / users_id... 将是表 user.user_id... 对我来说最有意义。我一直使用复数,直到我意识到复数作为表名没有意义。想想“SELECT * FROM customer table WHERE customer_id = 1”,其中“SELECT * FROM customers table WHERE customer_id = 1”。【参考方案11】:

我喜欢使用复数形式,只是因为一张表包含多个实体,所以对我来说似乎更自然。

Linq to SQL 在创建数据实体时将复数形式的表名转换为单数形式。如果 Microsoft 认为表名的复数形式是不好的做法,我认为 Microsoft 不会实现此功能。

【讨论】:

所以所有包含其他东西的东西都应该是复数? “我上了公共汽车,拿出我的几盒面巾纸,用装满绿色东西的鼻屎擤鼻涕”。 不,你要上一辆公共汽车。但是,如果您将多个总线存储在一个总线表中,则表名应该是复数。恕我直言,尽管实际上包含几条总线,但将表称为“总线”毫无意义。 嗯,我们能得到同样的鼻子例子吗? @Nestor:一个鼻子作为数据实体,一个表中有几个鼻子。恐怕看不到问题所在。 有点幽默,我猜这个单数 vs 复数更像是那些 PC vs Mac,开源 vs 微软......,我认为这取决于每个人。我和 Singular 在一起。【参考方案12】:

我个人的理念是,使用复数的数据库表名是多余的,除非您只打算让表包含一行。

【讨论】:

select * from customer 对我来说似乎“语法上”不正确...... @Arnshea:但是当您考虑在伪代码中执行的操作时说“获取所有客户表”也没有任何意义。 不要写T-SQL,使用LINQ和映射:return db.customers @ArnsheaC 但是,从客户内部联接经理中选择 *,customers.managerId = manager.id 也不好读。【参考方案13】:

我喜欢使用单数名称,例如 Agent,其 PK 名称如 AgentID。

但那只是我 :o)

【讨论】:

以上是关于单数还是复数数据库表名? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

具有复数和单数生成相同实体名称的 Lightspeed 数据库优先表

parent是单数还是复数

父母的英文parent应该用单数还是复数

父母的英文parent应该用单数还是复数

resource啥时候用单数?啥时候用复数?

我应该对 REST 资源使用单数还是复数命名约定?