Wenn ich eine Tabelle in MySQL habe, die eine Basisklasse darstellt, und ich habe eine Reihe von Tabellen, die die Felder in den abgeleiteten Klassen repräsentieren, die jeweils auf die Basistabelle mit einem Fremdschlüssel verweisen, gibt es einen Weg dazu MySQL dazu bringen, die Eins-zu-Eins-Beziehung zwischen der abgeleiteten Tabelle und der Basistabelle zu erzwingen, oder muss das im Code geschehen?MySQL Fremdschlüssel - wie One-to-One über mehrere Tabellen zu erzwingen?
Verwenden Sie das folgende schnell 'n' Dirty-Schema als Beispiel, gibt es eine Möglichkeit, MySQL dazu zu bringen, sicherzustellen, dass Zeilen in product_cd und product_dvd nicht dieselbe product_id teilen können? Gibt es eine bessere Möglichkeit, das Schema so zu entwerfen, dass die Datenbank diese Beziehung erzwingen kann, oder ist das einfach nicht möglich?
CREATE TABLE IF NOT EXISTS `product` (
`product_id` int(10) unsigned NOT NULL auto_increment,
`product_name` varchar(50) NOT NULL,
`description` text NOT NULL,
PRIMARY KEY (`product_id`)
) ENGINE = InnoDB;
CREATE TABLE `product_cd` (
`product_cd_id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
`product_id` INT UNSIGNED NOT NULL ,
`artist_name` VARCHAR(50) NOT NULL ,
PRIMARY KEY (`product_cd_id`) ,
INDEX (`product_id`)
) ENGINE = InnoDB;
ALTER TABLE `product_cd` ADD FOREIGN KEY (`product_id`)
REFERENCES `product` (`product_id`)
ON DELETE RESTRICT ON UPDATE RESTRICT ;
CREATE TABLE `product_dvd` (
`product_dvd_id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
`product_id` INT UNSIGNED NOT NULL ,
`director` VARCHAR(50) NOT NULL ,
PRIMARY KEY (`product_dvd_id`) ,
INDEX (`product_id`)
) ENGINE = InnoDB;
ALTER TABLE `product_dvd` ADD FOREIGN KEY (`product_id`)
REFERENCES `product` (`product_id`)
ON DELETE RESTRICT ON UPDATE RESTRICT ;
@Skliwz, können Sie bitte genauer darüber, wie Trigger verwendet werden kann diese Einschränkung mit dem Schema zur Verfügung gestellt zu erzwingen?
@boes, das hört sich gut an. Wie funktioniert es in Situationen, in denen Sie ein Kind eines Kindes haben? Zum Beispiel, wenn wir product_movie hinzugefügt und product_dvd ein Kind von product_movie gemacht haben? Wäre es ein Alptraum der Wartbarkeit, wenn die Checkbeschränkung für product_dvd auch alle untergeordneten Typen berücksichtigt?
Verwenden Sie Kommentare zu Antworten, anstatt Ihre Frage zu bearbeiten. – epochwolf