表名应该复数化吗?是用Person, Persons, People还是People?
在SQL Server中设计表时,是否要复数化表名存在很多困惑。你要如何选择是否进行复数化呢?
如果我们想存储一个由人组成的列表及人们的详细信息,我们是使用“Person”、“Persons”、“People”还是“Peoples”呢?有些人会用“People”,有些人会用“Person”,其他人或人们会用“Peoples”或“Persons”。
相关标准的规定是不进行复数化, 因为在一个表中,我们存储的是一组实体,我们按照该实体对表进行命名,所以如果我们想要在一个单独的实体或表中存储一个或更多的人, 我们就需要将他或他们存储在“Person”表中。
如果我们坚持这样做,那么它会使其他情况变得更简单,并使我们不再需要考虑如何复数化一个单词,例如,我曾看到将hierarchy复数化为"hierarcys"的。
需要证据来支持你和同事之间的争论吗?
如果我们看一下由E. F. Codd撰写的“大型共享数据库的数据关系模型”论文, 我们就会发现基本上是他发明了关系型数据库,他给出的例子是使用单数形式(供应商和组件)。
如果我们再看看ISO关于命名的标准(11179-5: 命名和识别原则),就会发现它也规定了单数名称应该“名词只以单数形式使用”。
最后,如果我们看看微软的例子,我们就可以看到有些困惑是从何而来!
旧的“pubs(示例数据库)”例子(https://github.com/microsoft/sql-server-samples/blob/master/samples/databases/northwindpubs/instpubs.sql )中混合使用了单数和复数命名。
“Northwind(另一种示例数据库)”也使用了一种混合命名。(https://raw.githubusercontent.com/Microsoft/sql-server-samples/master/samples/databases/northwind-pubs/instnwnd.sql )——注意,这里边有“Region”和“Territories”,我永远也不会知道它们的一致性在哪里!
Wide WorldImporters(微软SQL示例数据库)也使用了复数和单数混合的命名方法,有趣的是该示例数据库中使用是“Archive”的单数版本,而字典显示“Archives”适合单数或复数版本,所以它们很容易(意外地?)就已经具有一致性了。
这就很容易看出混淆从何而来,而且很有可能你将使用旧的数据库,所以请尝试与其他代码和团队保持一致。如果你必须使用复数名称,那么你需要定义什么时候在名称末尾加 “s”,以及哪种单词要使用“ies”或其他情况。
对于新项目或者你可以轻松更改实体名称的地方,那么我建议你必须使用单数名称,对于较老的项目,那么你需要更实际一点!
参考资料:
“大型共享数据库的数据关系模型”:
https://cs.uwaterloo.ca/~david/cs848s14/codd-relational.pdf
“IS0 111779” 第5节:
http://metadata-standards.org/11179/#11179-5
英文原文:https://the.agilesql.club/2019/05/should-i-pluralize-table-names-is-it-person-persons-people-or-people/?ut=hn
译者:浣熊君( ・᷄৺・᷅ )