我有一个我正在整理的汉字数据库,它有几个地图表来显示字符之间的一对多关系以及如何阅读它们。
保持简单,这里有三个样本表:
`kanji`
`id`
`character`
`readings`
`id`
`reading`
`reading_map`
`kanji` => Foreign Key to `kanji`.`id`
`reading` => Foreign Key to `readings`.`id`
我想弄清楚的是为这两个键设置ON UPDATE
和ON DELETE
设置的正确方法。
reading_map
或kanji
readings
表的条目
kanji
或readings
中的条目以进一步删除其随播条目 - 只有reading_map
条目应在删除时从任意一方删除< / LI>
ON UPDATE
阻止我更新链接表上的其他数据(例如,我希望能够在readings
。reading
中修复拼写错误而无需删除首先来自reading_map
的条目。我正在考虑为CASCADE
设置ON DELETE
,但是因为我正在从地图表中链接密钥,所以我不确定是否意味着删除地图条目会向外级联,或者如果删除其中一个链接的条目将向内级联。我不知道哪个是正确的ON UPDATE
设置。
答案 0 :(得分:1)
on delete cascade
字段上的 reading_map
仅在从reading_map
或readings
表中删除相应的密钥时才会删除kanji
条记录。所以你的例子就是你想要的。
答案 1 :(得分:1)
CREATE TABLE readings_map (
kanji INT NOT NULL,
reading INT NOT NULL,
FOREIGN KEY (kanji) REFERENCES kanji(id) ON DELETE CASCADE,
FOREIGN KEY (reading) REFERENCES readings(id) ON DELETE CASCADE
);
http://sqlfiddle.com/#!9/97c1cc/1 - 请查看此处的示例