命名“用户”表的最佳实践是什么?

65

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

  • 不要使用复数形式来命名表(比如 "users")
  • 不要使用保留关键字来命名表(比如 "user")
  • 不要给表名添加前缀,如 "tbl" 或其他对象类型前缀

在考虑了这些最佳实践之后,您建议如何为存储用户身份验证信息的表命名?


1
我正在使用ORM在mysql中的名为USER的表。你为什么说它是一个保留关键字? - Adil Mehmood
7
Adil Mehmood,“user”在MySQL中不是保留字,但在其他RDMS(如MS SQL Server)中是保留字。 - HK1
它在PostgreSQL中也是保留的,但如果加引号则可以使用:select * from "user"; - Alex Howansky
2
我认为最佳实践是使用表名和字段名,这些名称可以迁移到不同的RDBMS而无需担心因使用保留字而遇到错误。 - HK1
@Gilbert,我认为在表名前加上“域名”(应用程序名称或代码,而不是Web域名)并不是一个坏主意,这与我所提到的对象前缀是不同的。 - HK1
显示剩余2条评论
5个回答

40

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

将用户表命名为Person

您可能会对这个答案感兴趣,并且可以搜索ISO标准11179来获取命名指南


你确定这个ISO编号吗?我在谷歌上搜不到任何信息。它有一个我可以搜索的名称吗? - Ronnis
我认为他可能是在提到ISO 11179。我并不是说这个ISO文件与我的问题无关,但我认为它所涉及的层次比我预期的答案要深得多。 “最佳实践”并不总是直接符合这些类型文件中呈现的理想,但我承认我没有完全阅读过ISO 11179。 - HK1
PerformanceDBA,感谢您提供有关关系表命名规范的其他SO问题链接。我在几周前确实阅读过那篇文章,并且一直在应用其中的大部分内容。但是,那篇文章并没有涉及我在这里遇到的特定问题,即最适合的表名是保留字的情况。 - HK1
1
@HK1。我重新格式化了我的回答,我提供了一个替代“user”的选项。 - PerformanceDBA
3
"Customer" 是另一个。 - Michel Feinstein

8

我通常使用类似于 member 或 account 的名称,具体取决于应用程序。尽管如此,如果您使用现代设计工具和原则(例如,具有面向对象代码库的数据库抽象层或 ORM,将业务逻辑与数据访问分离),那么表命名变得相当无关紧要。您的开发人员应该只通过一个定义良好的接口来访问数据库,而不是手写需要知道表名的 SQL。例如,您可以将表命名为 account,但通过名为 User 的对象映射访问它。您的开发人员不应该考虑表格,而应该考虑访问对象,这些对象不会对命名产生同样的限制:

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

3

不要使用保留字、带引号或转义的单词作为数据库表名。

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

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

我强烈不建议在数据库表名中使用复数形式,如USERS。这是一种不好的做法,违反了 SQL 命名约定。数据库表名需要是单数名词。

我建议使用ACTOR作为存储用户详细信息的数据库表名。这个名字清晰、易懂且足够通用。它既可以用于公司,也可以用于个人(不像例如PERSON,只适用于个人而不适用于公司)。


3

使用同义词。使用哪个词取决于您在表中存储的内容,但是账户似乎是一个很好的替代方案。如果您想使用变体用户,我会违反您提到的第一个指南,而不是第二或第三个:用户足够常见,因此不一致性基本上可作为助记符。


帐户已经是 HSQL 中的一张表,所以如果你在单元测试中使用内嵌的 HSQL,你将会遇到冲突。 - Andreas
成员怎么样? - Bu Saeed

1

即使我不使用框架,我仍然遵循CakePHP规则:

按照惯例,表名应该是小写的、复数形式,并用下划线分隔多个单词。例如,模型名称为 Ingredient 时,期望的表名为 ingredients。模型名称为 EventRegistration 时,期望的表名为 event_registrations


4
这是一个有趣的方法,尽管我在这里汇聚的SO专家可能不会同意使用复数形式。 - HK1
1
@HK1 - Django ORM也是使用复数形式作为表名,这一点我不太喜欢。因此,我通常会在类的Meta信息中覆盖表名。 - Tony

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接