ここで基本的なことを誤解したかどうかはわかりませんが、次のようになります。
個人テーブル (個人には、名前、住所などの典型的な属性があります) と、選出された代表者のテーブルがあります。代表者には、追加の属性があります (たとえば、副代表者/代理代表者、または彼ら自身が代理者である誰か)。多くの人がいて、少数の代表者しかいない (n<200) ため、すべての人に共通するすべての属性を person テーブルに保存し、代表者固有のデータのみを Representatives-table に保存します。代表者のすべての「データ」は、個人テーブルとの関係です。この表は、誰が投票を許可されているか (および誰が彼の代理を許可されているか、または彼が代理を務めているか) の現在のステータスを反映しているだけです。
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;
すべてうまくいかない。「親行を削除または更新できません: 外部キー制約が失敗しました」しかし、個人を削除するつもりはなく、「代表者」テーブルで作成された関係だけを削除するつもりです。
mysqlのDELETE FROM と関係を無視する (行を削除するだけ) 関数はありますか?
私はこれを間違ってモデリングしていますか? もしそうなら、より良い方法は何でしょうか?
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;