【问题标题】:What is the best practice in naming your "user" table?命名“用户”表的最佳做法是什么?
【发布时间】:2011-07-14 12:28:34
【问题描述】:

以下是我在命名表时尝试遵循的三个最佳实践:

  • 切勿使用复数形式命名表(例如“users”)
  • 切勿使用保留关键字(例如“user”)命名表
  • 切勿在表名前加上“tbl”或其他对象类型前缀

记住所有这些,您建议如何命名将保存用户身份的表?

【问题讨论】:

  • 一致性可能与实际政策一样重要。
  • 我在 mysql 中使用一个名为 USER 的表和 ORM。为什么说它是保留关键字?
  • Adil Mehmood,“user”在 MySQL 中不是保留字,但在其他 RDMS,例如 MS SQL Server 中是保留字。
  • 在PostgreSQL中也是保留的,但是如果引用可以使用:select * from "user";
  • 我可能会补充一点,我认为使用可以迁移到不同 RDBMS 的表名和字段名也是一种最佳实践,而不必担心使用保留字时遇到错误。

标签: database database-design naming-conventions


【解决方案1】:

使用同义词。使用什么词取决于您在表中存储的确切内容,但account 让我觉得这是一个不错的选择。如果您想使用变体user,我会打破您提到的第一个准则,而不是第二个或第三个:users 很常见,以至于不一致基本上是助记符。

【讨论】:

  • account已经是HSQL中的表,所以如果你使用嵌入式HSQL进行单元测试,最终会产生冲突
  • 会员怎么样?
【解决方案2】:

我通常使用会员或帐户之类的东西,具体取决于应用程序。也就是说,如果您使用现代设计工具和原则(例如,具有将业务逻辑与数据访问分开的面向对象代码库的数据库抽象层或 ORM),那么表命名变得相当无关紧要。您的开发人员应该只通过定义明确的接口访问数据库,而不是通过需要他们知道表名的手写 SQL。例如,您可以命名表帐户,但通过名为 User 的对象映射对它的访问。您的开发人员不应该考虑表格,而应该考虑访问对象,它们不会有相同的命名限制:

$user = new User($username);
$user->authenticate($password);

【讨论】:

    【解决方案3】:

    我同意,不要使用任何保留字,或引用或括号或转义形式的保留字。

    将 User 表命名为 Person

    您可能对 this answer 和 google 感兴趣,以获取 ISO standard 11179 的命名指南

    【讨论】:

    • 你确定那个 ISO nr 吗?当我用谷歌搜索时,我找不到任何东西。它有一个我可以用谷歌代替的名字吗?
    • 我想他可能指的是 ISO 11179。我并不是说 ISO 文件与我的问题无关,但我确实认为它与我的答案类型不同/更深层次期待。 “最佳实践”并不总是与这些类型的文档中提出的理想直接一致,但我承认我是在没有通读 ISO 11179 的情况下这么说的。
    • PerformanceDBA,感谢有关关系表命名约定的其他 SO 问题的链接。几周前我确实通读了,并且一直在应用我阅读的大部分内容。但是,该特定帖子并未解决我在这里遇到的特定问题,其中最合适的表名是保留字。
    • @HK1。我已经重新格式化了我的答案,我确实提供了“用户”的替代方案。
    • 客户是另一个
    【解决方案4】:

    即使我不使用框架,我也会使用 CakePHP 规则:

    表名按照惯例是小写的,复数形式的表名由下划线分隔。例如,模型名称 Ingredient 需要表名 ingredients。模型名称为 EventRegistration 预计表名称为 event_registrations

    【讨论】:

    • 这是一种有趣的方法,尽管我在这里聚集了 SO 的专家,但可能不同意复数形式。
    • @HK1 - Django ORM 也是如此,表名使用复数,我不喜欢。所以我通常会在类的Meta信息中覆盖表名。
    【解决方案5】:

    不要对数据库表名使用保留字或引用或转义字。

    如果您真的想这样做,那么您需要转义名称:

    • 引号:“user"
    • Java + JPA 转义:@Table(name = "\"user\"")

    我强烈建议不要对像USERS 这样的数据库表名使用复数世界。这是一个不好的做法,违反了 SQL 命名约定。数据库表名必须是单数名词。

    我建议使用 ACTOR 作为数据库表名来存储用户详细信息。这个名字清晰易懂,足够笼统。它也可以用于公司和个人(不像 ex.PERSON,它只适合个人而不适合公司)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-18
      • 1970-01-01
      • 2011-10-30
      • 2019-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多