Database 给您的“客户”命名的最佳做法是什么;“用户”;桌子

Database 给您的“客户”命名的最佳做法是什么;“用户”;桌子,database,database-design,naming-conventions,Database,Database Design,Naming Conventions,以下是我在命名表时尝试遵循的三个最佳实践: 切勿使用复数形式命名表(如“用户”) 切勿使用保留关键字(如“user”)命名表 永远不要在表名前面加上“tbl”或其他对象类型前缀 记住所有这些,建议如何命名保存用户身份的表?使用同义词。使用什么词取决于您在表中存储的确切内容,但是account给我的印象是一个很好的选择。如果你想使用一个变体用户,我会打破你提到的第一条准则,而不是第二条或第三条:用户很常见,这种不一致性本质上是助记的。我通常使用类似于成员或帐户的东西,具体取决于应用程序。也就是

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

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

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

使用同义词。使用什么词取决于您在表中存储的确切内容,但是
account
给我的印象是一个很好的选择。如果你想使用一个变体
用户
,我会打破你提到的第一条准则,而不是第二条或第三条:
用户
很常见,这种不一致性本质上是助记的。

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

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

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

将用户表命名为Person


您可能会对和google的命名指南感兴趣,因为即使我不使用框架,我也会使用CakePHP规则:


按照惯例,表名是小写的,并用下划线分隔的多字表名进行复数。例如,
成分
的模型名称需要表名
成分
EventRegistration
的型号名称应为
event\u registrations

的表名,不要使用保留字或引号或转义字作为数据库表名

如果确实要这样做,则需要转义名称:

  • 引号:“
    user”
  • Java+JPA转义:
    @Table(name=“\”user\”)
我强烈建议不要对数据库表名使用复数形式,如
USERS
。这是一种不好的做法,与SQL命名约定背道而驰。数据库表名称必须是单数名词


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

一致性可能与实际策略一样重要。我在mysql中使用一个名为USER的表与ORM。为什么说它是一个保留关键字?Adil Mehmood,“user”在MySQL中不是保留字,但在其他RDM(如MS SQL Server)中是保留字。它在PostgreSQL中也是保留字,但如果被引用,则可以使用:从“user”中选择*;我想补充一点,我认为使用表名和字段名也是一种最佳做法,可以将它们迁移到不同的RDBMS,而不用担心使用保留字时会遇到错误。您确定ISO nr吗?我在谷歌上搜索时什么也找不到。它有一个我可以用谷歌搜索的名字吗?我想他可能指的是ISO 11179。我并不是说ISO文件与我的问题无关,但我确实认为它与我所期望的答案类型不同/更深层次。“最佳实践”并不总是与这些类型的文档中呈现的理想直接一致,但我承认,在没有通读ISO 11179.PerformanceDBA的情况下,我要说的是,感谢您链接到关于关系表命名约定的其他SO问题。几周前我确实读过这篇文章,并且已经应用了我读到的大部分内容。然而,这篇文章并没有解决我在这里遇到的问题,因为最合适的表名是保留字。@HK1。我已经重新格式化了我的答案,我确实提供了“用户”的替代方案。客户是另一个。这是一个有趣的方法,尽管我在这里召集了专家,所以可能不同意复数。@HK1-Django ORM也这样做,使用复数作为表名,我不喜欢。因此,我通常在类的
Meta
信息中重写表名。account已经是HSQL中的一个表,因此如果您使用嵌入式HSQL进行单元测试,您将最终遇到冲突成员如何?