具有映射表的正确外键结构

时间:2016-02-05 06:46:39

标签: mysql foreign-keys

我有一个我正在整理的汉字数据库,它有几个地图表来显示字符之间的一对多关系以及如何阅读它们。

保持简单,这里有三个样本表:

`kanji`
    `id`
    `character`

`readings`
    `id`
    `reading`

`reading_map`
    `kanji` => Foreign Key to `kanji`.`id`
    `reading` => Foreign Key to `readings`.`id`

我想弄清楚的是为这两个键设置ON UPDATEON DELETE设置的正确方法。

  • 如果从reading_mapkanji
  • 删除相关条目,我希望删除readings表的条目
  • 我不想删除kanjireadings中的条目以进一步删除其随播条目 - 只有reading_map条目应在删除时从任意一方删除< / LI>
  • 我不希望ON UPDATE阻止我更新链接表上的其他数据(例如,我希望能够在readingsreading中修复拼写错误而无需删除首先来自reading_map的条目。

我正在考虑为CASCADE设置ON DELETE,但是因为我正在从地图表中链接密钥,所以我不确定是否意味着删除地图条目会向外级联,或者如果删除其中一个链接的条目将向内级联。我不知道哪个是正确的ON UPDATE设置。

2 个答案:

答案 0 :(得分:1)

on delete cascade字段上的

reading_map仅在从reading_mapreadings表中删除相应的密钥时才会删除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 - 请查看此处的示例