Cha*_*son 14 database-design primary-key
如果我有这些表(*=主键):
user
id*
name
group
id*
name
Run Code Online (Sandbox Code Playgroud)
这是否更好?
user_group
user_id*
group_id*
Run Code Online (Sandbox Code Playgroud)
或者这更好吗?
user_group
id*
user_id
group_id
Run Code Online (Sandbox Code Playgroud)
mar*_*c_s 10
我总是投票给尽可能窄的键,静态(永不改变)因此我通常喜欢代理INT作为复合键的键.
如果你想从另一个表中引用复合键,你将始终必须指定几个条件 - 这有时会变得非常笨拙!
另请查看以下链接:
(当然,其他人可能会发布至少10个链接PRO自然键:-))
使用代理键没有坏处 - 去吧!:-)
渣
Vin*_*vic 10
鉴于user_id和group_id都已经是代理键,因此保证是唯一的(给定应用程序的正确实现),添加第三个id是完全多余的.
除非你使用某种ORM(遗憾的是)通常会使复合键的处理变得更加复杂.在这种情况下,您必须使用所选ORM评估冗余成本与易开发性.
tva*_*son 10
每当我从连接表中省略代理主键时,我就会后悔.这似乎就像当我开始编写代码来管理具有代理主键的关系时非常方便.我通常遵循Active Record模式并使用ASP.NET MVC,因此您的里程可能会有所不同.在MVC世界中,只需一个id键就可以放在URL的末尾,这是非常有利的.