数据库设计 - 主键命名约定

Mar*_*des 6 mysql database

我有兴趣知道人们在MySQL中命名数据库表主键的以下3种不同约定(以及为什么)?

- 示例1-

表名:用户,
主键列名:user_id

- 例2-

表名:用户,
主键列名:id

- 例3

表名:用户,
主键列名:pk_user_id

只是想听听想法,也许在这个过程中学到一些东西:)

谢谢.

Jag*_*mag 10

我会选择2.对我而言,"id"本身就足够了.由于该表是User,因此"user"中的列"id"表示它是User的标识条件.

但是,我必须补充说,命名约定都是关于一致性的.只要存在一致的模式并且它应用于整个应用程序,通常没有对错,这可能是命名约定有效性的更重要因素,以及它们使应用程序更容易理解的程度.因此保持.

  • 这种方法并不一致。从客户 c 内连接订单 o 中选择 c.id、o.id(c.id = o.cid)。此查询输出的两个字段的名称是什么?所以你必须使用别名,因此你的别名命名约定可能会不一致 (2认同)
  • @ f00-当我提到一致性时,我指的是能够依靠数据库中任何表中的“ id”列表示跨表相同的事实。关于别名,在命名约定中通常也会有一个别名的标准 (2认同)

Lar*_*tig 9

我总是更喜欢示例1中的选项,其中表名(冗余地)用在列名中.这是因为我ON user.user_id = history.user_idON user.id = history.user_idJOIN 更喜欢看.

然而,在这个问题上,对于这个问题的重视通常似乎在我的Stackoverflow上反对,大多数人都喜欢这个例子2.

顺便说一下,我更喜欢UserID到user_id作为列命名约定.我不喜欢键入下划线,并且使用下划线作为常见的SQL单字符匹配字符有时会有点混乱.

  • +1你是对的,一致性是KING,id远非一致的约定 (2认同)

HLG*_*GEM 8

在我看来,ID是您可以拥有的最糟糕的PK名称.TablenameID对报告的效果要好得多,因此在执行复杂的报告查询时,您不必为一堆名称相同的列添加别名.

我个人认为,如果列的含义相同,那么它们的名称应该相同.客户ID与orderid不同,因此它们在概念上应具有不同的名称.当你有很多连接和复杂的数据结构时,当pk和fk具有相同的名称时,它也更容易维护.有ID列时,很难发现连接中的错误.例如,假设您加入了四个表,其中所有表都有一个ID列.在最后一次连接中,您意外地使用了第一个表的别名而不是第三个表.如果您使用OrderID,CustomerID等而不是ID,则会出现语法错误,因为第一个表不包含该列.如果您使用ID,它将很乐意错误地加入.


Ran*_*ndy 6

我倾向于选择第一个选项user_id.

如果你选择id,你通常最终需要在查询中过多地使用别名.如果你选择more_complicated_id,那么你要么必须缩写,要么你的房间用完了,你就厌倦了输入这么长的列名.

2美分.


Mar*_*tin 6

我同意@InSane并且赞同Id.这就是为什么:

如果您有一个名为User的表,以及一个处理用户名称的列,您是将其称为UserName还是名称?"用户"似乎是多余的.如果您有一个名为Customer的表和一个名为Address的列,您是否调用CustomerAddress列?

虽然我也看到了你要使用的地方UserId,然后如果你有一个带有用户外键的表,该列也将是UserId.这样可以保证命名的一致性,但IMO并没有给你带来太多的收益.

  • 我不知道是谁拒绝了你,但你的观点是完全正确的。+1 (2认同)

DJ *_*mby 2

我一直很欣赏 Justinsomnia 对数据库命名约定的看法。读一读:http ://justinsomnia.org/2003/04/essential-database-naming-conventions-and-style/