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

单数:Client或复数:Clients

评论

我曾经有一个同事坚持表名应为单数而视图名应为复数。

还有其他思想流派。 1)使用允许人们用自然语言表达查询的动词,例如名为“ fred”的人获得20,000澳元(其中大写字母为表格)。 2)使用企业名称进行设置,例如人员,工资单,ORG_CHART等

可能的跨站点重复项:stackoverflow.com/questions/338156/…

#1 楼

由你决定。不过,请保持一致。

我个人更喜欢基于每个*行”存储的单数:订单,产品,用户,商品等。

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

编辑:

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

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

评论


它应该总是归结为个人选择吗?如果有两个人在一个数据库设计中工作,那么一个人可能将表命名为复数,而另一个表命名为单数。对于使用单数或复数,没有有效的理由吗?

– John Isaiah Carmona
2012年2月23日在8:23

@JohnIsaiahCarmona:添加了原因

– gbn
2012年2月23日在8:28

我同意使用单数是最明智的。如果您在此处以及在SO等上查找类似的问题,这似乎不是流行的观点。很多人似乎都将表作为集合的程序员观点,因此应该具有复数名称。我认为,也许ORM可能开始打破这种(不良)习惯的人们。如果您的表以复数名称开头,则很难区分父级和子级导航属性以及表的实例和集合对象。

–乔尔·布朗(Joel Brown)
2012-2-23在12:47

支持Singular的另一个原因是,如果您有一个规则,即PK以表名命名,例如TablenameID或TablenameCode或tablename_id。使用复数表名,您将以Orders.OrdersID(看起来不太正确)或Orders.OrderID结尾,在此您将复数用于表名,但将其更改为单数以作为列前缀。

–超立方体ᵀᴹ
2012年2月27日10:10



沿着同一条线的另一点。

–杰克·道格拉斯(Jack Douglas)
2014年7月21日在19:40

#2 楼

关于单数或复数表名,该主题似乎有争议,但不应如此。

虽然表是多个记录的集合,但表是根据一种类型的定义命名的它包含的记录。如果允许表使用与其包含的记录类型不同的名称,则可以为该表赋予复数名称,例如,可以使一个Employees表包含多个Employee记录。
但是SQL设计人员没有为表和记录类型提供单独的名称。

如果记录类型的名称(以及扩展名是表名)保持单数形式,因为它与用于描述一条记录的类的名称相对应。

如果要在程序中标识集合,则可以使用复数形式或更好的方法是使用适当的修饰符,例如EmployeeList或EmployeeArray。一个程序。

英语不好,所以roper编程语言,并尝试使数据库和程序语句符合英语,因为读取其中一条语句听起来更好,这是一个错误。

#3 楼

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

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

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

...

那些看起来很普通的词,可能会出现在业务线数据库中。复数单词作为关键词似乎比单数单词少见。因此,使用复数表名以避免与SQL关键字冲突可能是有益的。

评论


这太清楚了。只要远离保留词(单数或复数)即可。在调试可互换使用多个保留字的错误消息时,这确实有帮助。理想情况下,从应用程序领域中选择单词,使其与使用/用户更加相关。

– Emacs用户
15年7月18日在0:00

“太清楚了”是什么意思?

–尼尔·麦圭根(Neil McGuigan)
15年7月18日在0:09

这意味着不必要的更高开销来解密错误消息。例如,语法错误消息中的order by和order。或者尝试调试身份验证错误消息中的用户。

– Emacs用户
15年7月18日在20:04

IMO PurchaseOrder,PortalUser,UserSession比Order,User,Session更好,因此单数在这种情况下可能会很好

– John Jai
19年5月23日19:52

#4 楼

就像@gbn的回答一样,我认为这主要是个人喜好,就像他一样,我建议您做出的任何选择都应应用到所有地方(至少在该数据库中)。一致性是值得的。

但是,我更喜欢SELECT语句中的复数听起来更好:

SELECT Id, Name, Status 
FROM   Persons
WHERE  Status <> 5  --5 meaning deleted


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

评论


+ 1尽管从技术上说Person是People的复数形式,这是我使用单数的原因之一。某些ORM会自动为您创建表,并且您会遇到类似这种奇怪的情况,其中在语言上命名是不合逻辑的。

–全球DBA
18年1月6日,下午3:14

#5 楼

我相信SQL表应该具有复数名称。它读起来好多了。

书本记录的表应该称为书本。 ORM应该使用相同的约定。 Books对象是一个集合,并负责Books表中的所有记录。 Book对象主持单个记录。

这使编码更加自然。

select name, publication_date from books where publication_date > '2000-01-01';

books = Books()
for book in books.get("publication_date >= '2000-01-01'"):
    print book.name


评论


直到您必须在seep.get中为绵羊写东西时才有意义。弯曲规则,要灵活。

– Emacs用户
15年7月18日在0:03

确实,一些容器是带有非复数形式的词,例如名词-像“访问”。但可以使用以下方法进行修改:“用于访问中的access_record”。

– dlink
15年7月20日在13:21

看到链接对象使我有些生气。书籍和作者之间的链接表怎么样? “ BooksAuthors”的外观和声音听起来很恐怖,但是“ BookAuthor”的外观和声音更好。然后,您会遇到以奇数结尾的复数形式(状态)或不规则名词(孩子与孩子)的单词。 IMO眼痛的世界!

–斑点
17年8月30日在6:26

嗨,@ blobbles的复数形式是BookAuthors,而不是BooksAuthors。因此它仍然很自然。 BookPublishers,BookFormats等

– dlink
17年3月3日在21:32

可读性始终很好,但与句子无关,与我们从中获取数据的地方无关。例如table.field,所以author.authorName很好。从作者表中获取authorName。当只有一位作者时,复数看起来也很糟糕。 authors.authorName当只有一位作者时?这使imo更令人困惑。当然,现在我们已经取消了句子样式mysql_,并且有了更好的访问数据的方法,这当然会变得更好:)

–詹姆斯
18年1月17日在2:29

#6 楼

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

评论


这个答案并没有真正在整个线程中添加任何内容!例如,您无法通过调用表“ order”来回答问题!就个人而言,当英语无法解决问题时,我会使用法语单词-ordre,groupe ...始终使用表的注释字段来解释您的选择!但是,真正重要的是要遵守约定!

–Vérace
19年1月2日,10:00

它怎么不添加任何东西?我补充说,单数是较少的工作。如果您的意见与我的意见不同,请不要贬低我的意见。 “订单”不是问题,问题是更复杂的多元化,而不是诸如“类别”之类的-s,我已经看到它们以各种组合方式拼写错误,从而导致不必要的工作。

– ColacX
19年1月2日,10:11



#7 楼

这是非常个人的事情。我使用单数形式已有30年了。但是我明白为什么人们喜欢复数。书籍-作者很有趣,因为我认为书籍作者没有错。一本书可以有一个或多个作者。并且作者可能已经写了一本书或多本书(例如,共同撰写)。这也取决于您如何处理多位作者撰写的书籍。我同意其他答案;选择一个并保持一致。关于保留字问题。我认为不难解决的名称并不难。用户-> app_user,会话-> app_session,订单-> customer_order

#8 楼

我们从不同的角度看待事物,我认为这两个阵营的标识是:

单数(“用户”)
在表名及其所代表的事实之间建立关联的人一个容器,可以包含多行。

所以“用户容器”可以包含多行。

复数(“用户”)
在表名和事实之间不建立关联的人它代表一个容器。他们当然知道它是一个容器,但是它的名字并不存在。

例如
一个“鸡蛋纸箱”中可以有多个鸡蛋,但是这很明显,因为容器的名称中有提及,为多个鸡蛋提供了潜力。
但是,使用单表名称“ user”的容器名称中没有容器引用。例如,“ user_container”对于喜欢复数名称的人来说可能是可以接受的。

我认为这也是因为多年以来复数形式是常见的做法,并且在大多数在线教材中也是如此。


所有这些,我认为从技术上讲单数形式更准确,因为我们要命名单个容器,并且容器可以包含多个(或单个)行。 >对于人们来说,这似乎是错误的,因为他们在思维上将表名链接到内容(多行需要一个复数名称),而不是在思维上将命名容器链接到内容(一个容器允许多个)。

与往常一样,通常没有对与错,而更多的是适合情况的选择,并且重要的是要与您选择的内容保持一致。

如果您只是在做项目,没有真正的理由无论哪种方式,您都可以做到最好,也可以只是偏爱。在开发团队中应用相同的方法,只是做出一致的决定。