我不能確定我已經在這裏誤解了一些基本的東西,但在這裏有雲:從表中刪除與外鍵
我有一個個人表(個人對個人的典型屬性:名稱,地址等)和一個民選代表表格。代表有其他屬性(例如副代表/替代代表或他們自己替代的人)。由於我有很多人,只有幾個代表(< 200),我存儲了人表中所有人共有的所有屬性,並且只存儲了代表表中的代表特定數據。代表中的所有「數據」都是與人員的關係。這個表格只反映了誰被投票表決的現狀(誰可以替代他,或者他正在替代)。
representatives
(numbers are the pk for persons, and empty cells here are NULL in the db)
_____________________________
|id|has_substitute|is_sub_for|
| 1| 2 | |
| 2| | 1 |
| 3| | |
| 5| | |
因此而來的一天,一個代表得到撞到了他的投票權,特權,我需要從代表中刪除他,但不是在人表(他仍然是一個人)。同樣的,他也是一個分支,或者是那些分給他的人。在我的模式中他們是FK,但我不想刪除他們作爲個人,只是與外出代表的關係。只是代表表中的一行。
DELETE FROM representatives WHERE id=1;
全錯了。 '無法刪除或更新父行:外鍵約束失敗' 但我不打算刪除這些人,只是與'代表'表創建的關係。
是否有DELETE FROM和忽略的關係(只是刪除行)函數爲MySQL?
我的建模是錯誤的嗎?如果是這樣,那麼更好的方法是什麼?
PS:這裏是創建表的信息
CREATE TABLE `representatives` (
`person_id` varchar(33) NOT NULL,
`permanent_substitute_for_id` varchar(33) DEFAULT NULL,
`temporarily_substitute_for_id` varchar(33) DEFAULT NULL,
PRIMARY KEY (`person_id`),
KEY `representatives_250f5a24` (`permanent_substitute_for_id`),
KEY `representatives_79c95594` (`temporarily_substitute_for_id`),
CONSTRAINT `permanent_substitute_for_id_5c64807b` FOREIGN KEY (`permanent_substitute_for_id`) REFERENCES `persons` (`id`),
CONSTRAINT `person_id_refs_id_5c64807b` FOREIGN KEY (`person_id`) REFERENCES `persones` (`id`),
CONSTRAINT `temporarily_substitute_for_id_5c64807b` FOREIGN KEY (`temporarily_substitute_for_id`) REFERENCES `persones` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `persones` (
`id` varchar(33) NOT NULL,
`first_name` varchar(150) NOT NULL,
..[more stuff]..
PRIMARY KEY (`id`),
KEY `fylkesperspektiv_personer_70fdfe4` (`fylke_id`),
KEY `fylkesperspektiv_personer_3ab19c51` (`parti_id`),
CONSTRAINT `fylke_id_refs_id_36bce012` FOREIGN KEY (`fylke_id`) REFERENCES `fylkesperspektiv_fylker` (`id`),
CONSTRAINT `parti_id_refs_id_c381e045` FOREIGN KEY (`parti_id`) REFERENCES `fylkesperspektiv_partier` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
你可以發表涉及所有表的'CREATE TABLE'語句嗎? –
我會用這個信息更新這個問題。 – Eiriks
查看該鏈接http://stackoverflow.com/questions/6720050/foreign-key-constraints-when-to-use-on-update-and-on-delete/6720458#6720458瞭解關於外鍵參數的詳細信息 – regilero