主键的名字是设置成 id 还是 $tablename_id ?

2015-07-25 15:09:08 +08:00
 yakczh

比如 user 表,订单表 order_bill
第一种

user

  id
  username
  passowrd

order_bill

  id
  trade_no
  subject
  uid

第二种

user

  user_id
  username
  passowrd

order_bill

  order_bill_id
  trade_no
  subject
  user_id

第一种方案的问题是如果表多了 ,id满天飞
第二种方案如果表之间有引用的字段,名字会很长

3899 次点击
所在节点    MySQL
8 条回复
neutrino
2015-07-25 15:13:46 +08:00
第一种,要区分的时候写table_name.id即可,还有个好处是看到table_name_id就知道不是这个表的
qqjt
2015-07-25 15:14:16 +08:00
偏爱第一种。写php比较多,大多mvc的php框架也是第一种,可以直接数据表对应model。
fengyqf
2015-07-25 16:25:05 +08:00
更倾向于
[user]
id
name
passwd

[order]
id
  trade_no
  subject
  uid


select o.id,o.trade_no,trade.subject,o.uid,u.id as user_id,u.name
from `order` u inner join `user` u on u.id=o.uid
....
wingyiu
2015-07-25 18:46:48 +08:00
第二种,sql join时可以用USING
yakczh
2015-07-25 20:52:41 +08:00
第二种方案字段重名的概率很小,重名的外键可以用join来的using(xxx) 来拼接 更适合用程序来生成Sql

比如传入参数 $_param=array('trade_bill_id|='=>111,'subject|like'=>'%xxx','user_id|='=>222);
根据这些参数就可以生成sql

而如果是 $_param=array('id|='=>111,'subject|like'=>'%xxx','uid|='=>222);

在处理这个id字段的时候,就不知道是哪个表的
jdlau
2015-07-26 00:51:13 +08:00
一般用第二种
msg7086
2015-07-26 05:45:01 +08:00
从Rails的角度来看,两种都不行。

应该是
users: id, name, pass
orders: id, subject, user_id
xifangczy
2015-07-26 17:07:38 +08:00
边写还要边去查看每个id叫什么名字,这很蛋疼。id就是id就完事了,第二种想法很好但会觉得过于啰嗦。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/208264

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX