复数与单数表名

Joh*_*ona 57 database-design naming-convention

创建新数据库时应如何命名表?

单数:Client或复数:Clients

gbn*_*gbn 62

由你决定。不过要保持一致。

个人更喜欢单数,基于每个 *row" 存储的内容:订单、产品、用户、项目等。

这与我使用单一实体/类型的建模(通过对象角色建模)相匹配。

编辑:

一个原因是,当您有链接表时,复数会失败:
Orders,Products会给OrderProductsOrdersProducts。听起来都不正确

或历史表(当然,您可以为此使用模式):
Orders->OrdersHistory或(不!)OrdersHistories?不会Order->OrderHistory更好吗?

  • 另一个支持 Singular 的原因是如果你有一个规则,PK 以表名命名,例如 `TablenameID` 或 `TablenameCode` 或 `tablename_id`。对于复数表名,您最终会得到`Orders.OrdersID`(看起来不正确)或`Orders.OrderID`,其中表名使用复数但列前缀更改为单数。 (5认同)
  • 我同意使用单数是最明智的。这似乎不是流行的观点,如果您在此处和 SO 上查看类似的问题,等等。很多人似乎从程序员的角度将表视为集合,因此应具有复数名称。我认为 ORM 可能会开始打破人们的这种(坏)习惯。如果您的表以复数名称开头,则很难区分父导航属性和子导航属性以及区分表的实例和集合对象。 (4认同)
  • 它应该总是归结为_个人_选择吗?如果有 2 个人从事一种数据库设计,那么一个人可能将表命名为复数,而另一个命名为单数。**对于为什么使用`Singular` 或`Plural` 没有有效的推理吗?** (3认同)
  • @JohnIsaiahCarmona:添加了一个原因 (2认同)

小智 11

关于单数与复数表名,这个主题似乎是有争议的,但它不应该是。

虽然表是多条记录的集合,但表以它包含的一种记录类型的定义命名。如果允许表的名称与其包含的记录类型的名称不同,则可以为表指定复数名称,例如,您可以拥有一个包含多个员工记录的员工表。但是 SQL 的设计者没有为表和记录类型提供单独的名称。

如果记录类型的名称(以及表名)保持单数,那么对于使用数据的面向对象程序来说,事情会更合乎逻辑,因为它将与您用来描述一条记录的类的名称相对应.

如果您想在程序中标识一个集合,您可以使用复数,或者使用适当的修饰符更好,例如 EmployeeList 或 EmployeeArray。

对于自动代码生成和具有不同语言背景或对程序中复数形式形成想法的程序员来说,不规则复数也存在问题。

英语不是一种好的和合适的编程语言,试图使数据库和程序语句符合英语,因为阅读其中一个语句听起来更好是错误的。


Nei*_*gan 8

“订单”是一个保留字。“订单”不是

“用户”是保留字。“用户”不是

“会话”是一个保留字。“会话”不是

“结果”是保留字。“结果”不是

“相对”是保留字。“亲戚”不是

...

这些似乎是可能出现在业务线数据库中的常用词。与单数词相比,复数词作为关键词似乎不太常见。因此,使用复数表名以避免与 SQL 关键字冲突可能是有益的。

  • 为了清楚起见,这太接近了。远离保留词,单数或复数。在调试交替使用复数保留字的错误消息时,这真的很有帮助。理想情况下,从应用程序域中选择单词,使其与使用/用户更相关。 (3认同)
  • “太近而不清楚”是什么意思? (2认同)
  • 这意味着破译错误消息需要不必要的更高开销。例如,语法错误消息中的 order by 和 orders。或者尝试调试身份验证错误消息中的用户和用户。 (2认同)
  • IMO PurchaseOrder、PortalUser、UserSession 比 Order、User、Session 更好,因此在这种情况下单一的可能会很好 (2认同)

And*_*nea 5

正如@gbn 的回答一样,我认为这主要是偏好问题,就像他一样,我建议您做出任何选择,将其应用于任何地方(至少在该数据库中)。一致性是值得的。

然而,我的偏好是复数在SELECT陈述中听起来更好:

SELECT Id, Name, Status 
FROM   Persons
WHERE  Status <> 5  --5 meaning deleted
Run Code Online (Sandbox Code Playgroud)

我的意思是,在这种情况下,至少,表中有几个人,其中几个人返回给了客户。

  • + 1 虽然从技术上讲,Person 的复数是 People,这是我使用单数的原因之一。一些 ORM 会自动为您创建表,并且您会遇到这样的奇怪场景,其中语言上的命名不合逻辑。 (3认同)

Col*_*acX 5

经过几年的编程工作后,我得出的结论是,多元化是一种不必要的复杂化。我的观点是,根据 KISS 哲学,出于时间和效率的原因,程序员应该努力为所有问题寻求最懒惰和最简单的解决方案。因此,Singular 可以减少所有情况下所需的工作。

  • 怎么会不添加任何东西呢?我补充说,在我看来,单一就是更少的工作。如果您有与我不同的观点,请不要贬低我的观点。“订单”不是问题,问题是更复杂的复数形式,而不是像“类别”这样的-s,我已经看到它以各种组合方式拼写错误,导致不必要的工作。 (3认同)