2013-06-18 165 views
0

假设我有一个连接表来解析两张表之间的多对多关系。我的联结表也有它自己的'方法'栏来描述关系。通常情况下,我会制作[a],[b]和[method]的组合主键(该方法需要成为使行独一无二的部分),但是我的问题是[method]字段可以是NULL。因此我不能将它添加到主键。没有主键的连接表

所以我所做的就是创建唯一索引:

ALTER TABLE A_B ADD UNIQUE INDEX `Unique` (`a`, `b`, `method`); 

表没有主键。这是一件好事吗?还是我需要做一些不同的事情?

+1

在结合表主键可能不是必要的,但事情我会考虑包括:(1)唯一的索引或主键防止数据的复制(冗余); (2)主键在更新/删除行时很有用,因为它消除了目标行的歧义。 FWIW,即使你可以在一个唯一的索引中包含一个可为空的列,当部分关键字为NULL时,MySQL不会强制实现密钥唯一性,即只能有一个'a','b','x'行,但任意数量的'a','b',NULL行。 – Zenilogix

回答

1

使用主键不是确保记录唯一性的唯一方法。您可以实施一个独特的约束来完成所需的任务。

http://www.w3schools.com/sql/sql_unique.asp

+0

我通过添加的独特索引强制独特性,所以我应该在那里很好。从数据库设计角度来看,在联结表上没有键是没问题的? – Cody

+1

虽然唯一性可以通过没有索引的约束来实施,但使用唯一索引通常是更好的选择(假设多于“少”行)。我只会在表格保证只有少数几行的外键列上省略索引。 – Zenilogix