我有一个项目清单.大多数这些物品都没有库存. item表有id,name,description.项目数量存储在名为inventory的另一个表中.库存表具有item_id和库存商品的数量.
我是否需要库存表的主键?如果是这样,我应该使用串行密钥还是复合密钥?什么时候表没有主键?
编辑:谢谢大家提供的信息.我现在总是有主键,除非极少数例外.我还了解了有关串行与复合键的更多信息.
解决方法
始终致力于拥有主键.
如果您不确定,请使用主键.
即使你99.99%肯定你不需要它,也有一个.多年来我通过经验学到的要求发生了变化.
我能想到的唯一例子是多对多表,只有两个foreign_keys和超大(数亿行)表,每个字节都很重要.但即便如此,仍然强烈建议使用单独的,独特的,无商业价值的密钥.
这里有一些更好的信息:
http://weblogs.sqlteam.com/jeffs/archive/2007/08/23/composite_primary_keys.aspx
和这里:
http://www.techrepublic.com/article/the-great-primary-key-debate/1045050
这里:
http://databases.aspfaq.com/database/what-should-i-choose-for-my-primary-key.html
和这里:
Should I use composite primary keys or not?
在你的例子中,我肯定会有一个.
“不”拥有一个的决定应该基于一个非常明确的需求和理解以及实际或预测(例如体积)问题.
调试和故障排除时会出现这种需求的一个很好的例子.就像在每个表中创建和更新列(我的另一个最喜欢的)一样,此信息最初可能不会被/用于前端,但是男孩可以帮助跟踪和解决问题. (btw更新标记现在通常是像Ruby On Rails这样的框架中的标准,它也适用于每个具有id字段的表的约定!)