可能重复:
Should each and every table have a primary key?主键和数据库规范化
我一直对有关数据库规范化学校的项目。 我需要帮助的正常化有我在遇到困难没有主键 表一表,订阅一个表,它的结构是这样的:
itemSubscribed emailAddress
-------------- ------------
1 [email protected]
1 [email protected]
1 [email protected]
2 [email protected]
2 [email protected]
3 [email protected]
注意itemSubscribed
和emailAddress
值可能会重复,所以都不能成为主键。
这种结构将正常工作与我的代码,我可以发送电子邮件给所有项目X的用户时,有项X的更新,但我的老师需要一个规范化的数据库和1NF必须有一个主键。
如果我为了创建主键而创建了一个自动生成的主键,我不能继续使用3NF,因为它要求所有列都依赖于主键,所以w/c不是这种情况。
我应该创建一个自动生成的主键吗?我错过了关于3NF的一些事情吗?
嗯,你忘了定义一个问题! – home
尽可能难以复制占位符文本,最后忘记了这段时间。 – BoltClock
我不能说这是一个答案,因为它已经关闭了,当然这有点晚了,但是......看起来你所描述的是一张桥表。桥表通常不是什么,而是一个复合主键。如果您将'itemSubscribed'和'emailAddress'列一起作为主键,则不会有任何重复项,并且它位于3NF中。自动生成的主键是您想要使用桥接表完成的最后一件事,因为它只会导致混淆和额外的工作,而实际上却鼓励重复。 – jmoreno