我有兴趣知道人们在MySQL中命名数据库表主键的以下3种不同约定(以及为什么)?
- 示例1-
表名:用户,
主键列名:user_id
- 例2-
表名:用户,
主键列名:id
- 例3
表名:用户,
主键列名:pk_user_id
只是想听听想法,也许在这个过程中学到一些东西:)
谢谢.
Jag*_*mag 10
我会选择2.对我而言,"id"本身就足够了.由于该表是User,因此"user"中的列"id"表示它是User的标识条件.
但是,我必须补充说,命名约定都是关于一致性的.只要存在一致的模式并且它应用于整个应用程序,通常没有对错,这可能是命名约定有效性的更重要因素,以及它们使应用程序更容易理解的程度.因此保持.
我总是更喜欢示例1中的选项,其中表名(冗余地)用在列名中.这是因为我ON user.user_id = history.user_id比ON user.id = history.user_idJOIN 更喜欢看.
然而,在这个问题上,对于这个问题的重视通常似乎在我的Stackoverflow上反对,大多数人都喜欢这个例子2.
顺便说一下,我更喜欢UserID到user_id作为列命名约定.我不喜欢键入下划线,并且使用下划线作为常见的SQL单字符匹配字符有时会有点混乱.
在我看来,ID是您可以拥有的最糟糕的PK名称.TablenameID对报告的效果要好得多,因此在执行复杂的报告查询时,您不必为一堆名称相同的列添加别名.
我个人认为,如果列的含义相同,那么它们的名称应该相同.客户ID与orderid不同,因此它们在概念上应具有不同的名称.当你有很多连接和复杂的数据结构时,当pk和fk具有相同的名称时,它也更容易维护.有ID列时,很难发现连接中的错误.例如,假设您加入了四个表,其中所有表都有一个ID列.在最后一次连接中,您意外地使用了第一个表的别名而不是第三个表.如果您使用OrderID,CustomerID等而不是ID,则会出现语法错误,因为第一个表不包含该列.如果您使用ID,它将很乐意错误地加入.
我倾向于选择第一个选项user_id.
如果你选择id,你通常最终需要在查询中过多地使用别名.如果你选择more_complicated_id,那么你要么必须缩写,要么你的房间用完了,你就厌倦了输入这么长的列名.
2美分.
我同意@InSane并且赞同Id.这就是为什么:
如果您有一个名为User的表,以及一个处理用户名称的列,您是将其称为UserName还是名称?"用户"似乎是多余的.如果您有一个名为Customer的表和一个名为Address的列,您是否调用CustomerAddress列?
虽然我也看到了你要使用的地方UserId,然后如果你有一个带有用户外键的表,该列也将是UserId.这样可以保证命名的一致性,但IMO并没有给你带来太多的收益.
我一直很欣赏 Justinsomnia 对数据库命名约定的看法。读一读:http ://justinsomnia.org/2003/04/essential-database-naming-conventions-and-style/