一尘不染

SQL主键-是否有必要?

sql

我有项目清单。这些物品大多数都没有库存。项目表具有ID,名称,描述。项目数量存储在另一个名为清单的表中。库存表具有item_id和库存数量。

我是否需要库存表的主键?如果是这样,我应该使用序列密钥还是复合密钥?什么时候可以没有主键的表?

编辑:谢谢大家提供的非常有益的信息。我现在将始终拥有主键,除了极少数的例外。我还学到了更多关于串行键和复合键的信息。


阅读 189

收藏
2021-05-05

共1个答案

一尘不染

始终以拥有主键为目标。

如果不确定,请使用主键。

即使您99.99%的人肯定会不需要它,也要准备一份。正如我从多年的经验中学到的,需求发生了变化。

我真正想到的唯一示例是多对多表,其中只有两个foreign_keys和超大型(亿万行)表,每个字节都很重要。但是即使那样,仍然仍然强烈建议使用单独的,唯一的,没有业务价值的id密钥。

有关此的更多信息,请访问:http
//weblogs.sqlteam.com/jeffs/archive/2007/08/23/composite_primary_keys.aspx

在您的示例中,我肯定会有一个。

“不”拥有一个人的决定应该基于非常明确的需求以及对拥有一个人的实际或预测(例如数量)问题的理解。

在调试和故障排除时,便出现了这种需求的一个很好的例子。就像在每个表中创建和更新列(我的另一个最爱)一样,此信息最初可能不会被前端使用/用于前端,但是男孩可以帮助您跟踪和解决问题。(btw更新戳现在通常在诸如
Ruby On Rails之 类的框架中是标准的,它也与每个具有id字段的表的约定都很好地兼容!)

2021-05-05