学术界认为,表名应该是存储其属性的实体的单数。
我不喜欢任何需要在名称周围加方括号的T-SQL,但我已经将一个Users表重命名为单数,这永远意味着使用该表的人有时不得不使用括号。
我的直觉是,保持单数更正确,但我的直觉也是,括号表示不需要的东西,比如列名中有空格等。
我该留下还是该走?
学术界认为,表名应该是存储其属性的实体的单数。
我不喜欢任何需要在名称周围加方括号的T-SQL,但我已经将一个Users表重命名为单数,这永远意味着使用该表的人有时不得不使用括号。
我的直觉是,保持单数更正确,但我的直觉也是,括号表示不需要的东西,比如列名中有空格等。
我该留下还是该走?
当前回答
两个网站都有不同的论文,我认为你只需要选择你的一方。就我个人而言,我更喜欢Plular来命名表,当然,单数来命名列。
我喜欢你怎么读这个:
SELECT CustomerName FROM Customers WHERE CustomerID = 100;
的确,我们有OOP,这很好,但大多数人仍然使用关系数据库,而不是对象数据库。关系数据库不需要遵循OOP概念。
另一个例子是,您有一个表Teams,它保存了TeamID、TeamColor和PlayerID,并且对于一定数量的PlayerID将具有相同的TeamID和TeamColor。。。
该球员属于哪支球队?
SELECT * FROM Teams WHERE PlayerID = X
X队的所有球员?
SELECT * FROM Players INNER JOIN Teams ON Players.PlayerID = Teams.PlayerID WHERE Teams.TeamID = X
你觉得这一切都好吗?
无论如何,还可以看看W3Schools使用的命名约定:
http://www.w3schools.com/sql/sql_join_inner.asp
其他回答
我通过将表命名为“雇员”(实际上是“雇员”)来解决同样的问题。我尽量避免与可能保留的单词发生冲突。即使是“用户”对我来说也很近。
如果你去那里会有麻烦,但如果你留下来,麻烦就会加倍。
我宁愿违背一些假定的非复数命名惯例,也不愿用可能是保留词的名称来命名我的表。
如果您使用Zend Framework(PHP)等特定框架,那么明智的做法是表类使用复数,行类使用单数。
因此,假设您创建了一个表对象$users=newUsers(),并将行类声明为User,那么您也可以调用newUser()。
现在,如果对表名使用单数,则必须执行类似于newUserTable()的操作,其中的行是newUserRow()。对我来说,这看起来比为表设置对象Users()和为行设置User()对象更笨拙。
如果您使用对象关系映射工具,或者将来会使用,我建议您使用Singular。
一些工具(如LLBLGen)可以自动更正多个名称(如用户到用户),而无需更改表名本身。为什么这很重要?因为当它被映射时,你希望它看起来像User.Name而不是User.Name,或者更糟糕的是,我的一些旧数据库表命名为tblUsers.strName,这在代码中令人困惑。
我的新经验法则是判断它转换成对象后的外观。
我发现一个不适合我使用的新命名的表是UsersInRoles。但总会有一些例外情况,即使在这种情况下,它看起来也很像UsersInRoles.Username。
单数的我会将包含一组用户行表示对象的数组称为“用户”,但该表是“用户表”。国际海事组织认为,表只是它所包含的一组行,这是错误的;表是元数据,行集是分层地附加到表的,而不是表本身。
当然,我一直使用ORM,用多个表名编写的ORM代码看起来很愚蠢,这有助于提高效率。