创建新数据库时应如何命名表?
单数:Client
或复数:Clients
?
person NAMED 'fred' EARNS 20,000
(其中大写名称是表格)。2)用企业的名称为集例如PERSONNEL
,PAYROLL
,ORG_CHART
等
创建新数据库时应如何命名表?
单数:Client
或复数:Clients
?
person NAMED 'fred' EARNS 20,000
(其中大写名称是表格)。2)用企业的名称为集例如PERSONNEL
,PAYROLL
,ORG_CHART
等
Answers:
由你决定。只是要保持一致。
就个人而言,我更喜欢基于每个“行”存储的单数:订单,产品,用户,物品等。
这与我使用单个实体/类型的建模(通过对象角色建模)匹配。
编辑:
原因之一是,当你有链接表复数失败:
Orders
,Products
会给OrderProducts
或OrdersProducts
。听起来都不正确
或历史记录表(当然,您可以为此使用模式):
Orders
-> OrdersHistory
或(否!)OrdersHistories
?会不会Order
- > OrderHistory
更好吗?
Singular
或Plural
?
TablenameID
or TablenameCode
或tablename_id
。使用复数表名,您最终Orders.OrdersID
会看到(看起来不正确),或者Orders.OrderID
使用复数表名,但是将列前缀更改为单数。
关于单数或复数表名,该主题似乎有争议,但事实并非如此。
表是多个记录的集合,而表则以其包含的一种记录类型的定义命名。如果允许一个表的名称与其表所包含的记录类型的名称不同,则可以为该表赋予复数名称,例如,可以使一个Employees表包含多个Employee记录。但是SQL的设计者没有为表和记录类型提供单独的名称。
如果记录类型的名称(以及表名的扩展名)保持单数形式,则对于使用数据的面向对象程序来说,事情就更合乎逻辑了,因为它将与您用来描述一条记录的类的名称相对应。
如果随后要在程序中标识集合,则可以使用复数形式,或者更好的方法是使用适当的修饰符,例如EmployeeList或EmployeeArray。
用于自动代码生成的不规则复数以及具有不同语言背景或关于程序中的复数形式的思想的程序员也存在问题。
英语不是一种很好的编程语言,并且试图使数据库和程序语句符合英语,因为读取其中一条语句听起来更好,这是一个错误。
就像@gbn的答案一样,我认为这主要是个人喜好,就像他一样,我建议您做出的任何选择都应应用到所有地方(至少在该数据库中)。一致性是值得的。
但是,我更喜欢在SELECT
陈述中复数听起来更好:
SELECT Id, Name, Status
FROM Persons
WHERE Status <> 5 --5 meaning deleted
我的意思是,在这种情况下,至少有几个人在桌子上,其中有几个人还给了客户。
“订单”是保留字。“订单”不是
“用户”是保留字。“用户”不是
“会话”是保留字。“会话”不是
“结果”是保留字。“结果”不是
“相对”是保留字。“亲戚”不是
...
这些似乎很常见,可能会出现在业务线数据库中。复数单词作为关键词似乎不如单数单词常见。因此,使用复数表名以避免与SQL关键字冲突可能是有益的。
我相信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
table.field
,所以author.authorName
完全可以。从作者表中获取authorName。当只有一位作者时,复数看起来也很糟糕。authors.authorName
什么时候只有一位作者?更加令人困惑的imo。当然,现在我们已经取消了句子样式mysql_,有了更好的方法来访问数据,这当然会变得更好:)
经过几年的编程工作,我得出的结论是多元化是不必要的复杂性。我的观点是,根据KISS的哲学,程序员应出于时间和效率的原因,为所有问题寻求最懒惰和最简单的解决方案。因此,单数形式可以减少所有情况下所需的工作。
我们从不同的角度看待事情,我认为两个阵营的识别依据是:
单数(“用户”)
在表名和表名表示容器的事实之间建立关联的人员。
因此,“用户容器”可以包含多行。
复数(“用户”)
不在表名和表名表示容器之间建立关联的人。当然,他们知道这是一个容器,但它的名称并不存在。
例如,
一个“鸡蛋纸箱”中可以有多个鸡蛋,但是这很明显,因为容器的名称中有提及,为多个鸡蛋提供了潜力。但是,使用单表名称“ user”时,名称中不包含容器引用。例如,“ user_container”对于喜欢复数名称的人来说可能是可以接受的。
我认为这也是因为多年的复数惯例和大多数在线教材中的惯例。
综上所述,我认为从技术上讲单数形式更准确,因为我们要命名单个容器,并且容器可以包含多个(或单个)行。
对于人们来说,这似乎是错误的,因为他们在思维上将表名链接到内容(多个行需要一个复数名称),而不是在思维上将命名容器链接到内容(一个容器允许多个)。
与往常一样,通常没有对与错,而更多的是适合什么情况,重要的是要与您选择的内容保持一致。
如果您只是在做项目,则没有真正的理由去做任何您认为最好或只是偏爱的事情。在开发团队中应用相同的方法,只是做出一致的决定。