协慌网

登录 贡献 社区

表命名困境:奇异与多个名称

学术界认为表名应该是他们存储属性的实体的单数。

我不喜欢任何需要方括号的 T-SQL,但是我已经将一个Users表重命名为单数,永远判断那些使用表的人有时必须使用括号。

我的直觉是,保持单数是更正确的,但我的直觉也是括号表示不受欢迎的人,如列名,其中有空格等。

我应该走还是留?

答案

我有同样的问题,在阅读完这里的所有答案后,我肯定会留在 SINGULAR,原因:

原因 1 (概念)。你可以想到包含苹果的包如 “AppleBag”,如果包含 0,1 或者 100 万个苹果没关系,它总是相同的包。表只是容器,表名必须描述它包含的内容,而不是它包含的数据量。另外,复数概念更多地是关于口语(实际上确定是否存在一个或多个)。

原因 2 。 (方便)。与复数名称相比,更容易出现奇异名称。对象可以具有不规则的复数或者根本不具有复数,但是总是具有单数(除了新闻之外的少数例外)。

  • 顾客
  • 订购
  • 用户
  • 状态
  • 新闻

原因 3 。 (审美和秩序)。特别是在主 - 详细信息场景中,这更好地读取,更好地按名称对齐,并且具有更多逻辑顺序(Master first,Detail second):

  • 1.Order
  • 2.OrderDetail

相比:

  • 1.OrderDetails
  • 2.Orders

原因 4 (简单)。总而言之,表名,主键,关系,实体类...... 最好只知道一个名称(单数)而不是两个(单数类,复数表,奇异字段,单数 - 复数主 - 细节.. 。)

  • Customer
  • Customer.CustomerID
  • CustomerAddress
  • public Class Customer {...}
  • SELECT FROM Customer WHERE CustomerID = 100

一旦您知道自己正在处理 “客户”,就可以确定您将使用相同的单词来满足您的所有数据库交互需求。

原因 5 。 (全球化)。世界变得越来越小,你可能拥有一个不同国籍的团队,而不是每个人都有英语作为母语。非本地英语程序员更容易想到 “存储库” 而不是 “存储库” 或 “状态” 而不是 “状态”。具有单一名称可以减少错别字导致的错误,通过不必考虑“是孩子还是孩子?” 来节省时间,从而提高生产率。

原因 6 。 (为什么不?)。它甚至可以节省您的写作时间,节省您的磁盘空间,甚至可以让您的电脑键盘持续更长时间!

  • SELECT Customer.CustomerName FROM Customer WHERE Customer.CustomerID = 100
  • SELECT Customers.CustomerName FROM Customers WHERE Customers.CustomerID = 100

你已经保存了 3 个字母,3 个字节,3 个额外的键盘点击:)

最后,您可以将那些与保留名称混淆的名称命名为:

  • 用户 > LoginUser,AppUser,SystemUser,CMSUser,...

或使用臭名昭着的方括号 [用户]

如果您使用对象关系映射工具,或将来我建议使用Singular

像 LLBLGen 这样的工具可以自动更正多个名称,例如用户到用户,而无需更改表名本身。为什么这很重要?因为当它被映射时你希望它看起来像 User.Name 而不是 Users.Name,或者更糟糕的是我的一些旧数据库表命名 tblUsers.strName,这在代码中只是令人困惑。

我的新经验法则是判断一旦它被转换成对象后它的外观。

我找到的一个表不适合我使用的新命名是 UsersInRoles。但总会有少数例外,即使在这种情况下它看起来也很好,如 UsersInRoles.Username。

就 “标准” 而言,其他人已给出了相当不错的答案,但我只想添加这个......“用户”(或 “用户”)是否可能实际上并不是表中所含数据的完整描述?并不是说你应该对表名和特异性过于疯狂,但也许类似 “Widget_Users”(其中 “Widget” 是你的应用程序或网站的名称)会更合适。