il est possible de faire référence à une colonne de plusieurs clés étrangères

J'ai quelques tables, et je veux faire référence à une colonne de tableau PDF de plusieurs autres tables.
il est possible de faire référence à une colonne de plusieurs clés étrangères

par exemple, si le tableau PDF select de sortie ressemble à ceci:

ITEM_TYPE  ITEM_ID  QUANTITY

1          23       3
2          12       1

il me dit:

PDF ont 3 Roue d'une Voiture de Produit, et 1 Voiture Modèle d'en-Tête ci-dessus;

J'ai écrit le code SQL, mais ne fonctionne pas correctement:

CREATE TABLE `pdf_created` (
`id` INT(10) UNSIGNED NOT NULL UNIQUE AUTO_INCREMENT,
`pdf_id` INT(10) NOT NULL,
`item_type` INT(3) UNSIGNED NOT NULL,
`item_id` INT(10) UNSIGNED NOT NULL,
`quantity` INT(3) NOT NULL,
PRIMARY KEY (`id`),
KEY `FK_pdf_id` (`pdf_id`),
CONSTRAINT `FK_pdf_id` FOREIGN KEY (`pdf_id`) REFERENCES `pdf` (`id`),
KEY `FK_item_type` (`item_type`),
CONSTRAINT `FK_item_type` FOREIGN KEY (`item_type`) REFERENCES `item` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
KEY `FK_item_id` (`item_id`),
CONSTRAINT `FK_item_id` FOREIGN KEY (`item_id`) REFERENCES `product` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `FK_item_id` FOREIGN KEY (`item_id`) REFERENCES `service` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `FK_item_id` FOREIGN KEY (`item_id`) REFERENCES `header` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `header` (
`id` INT(10) UNSIGNED NOT NULL UNIQUE AUTO_INCREMENT,
`title` VARCHAR(255),
`desc` VARCHAR(65535),
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `service` (
`id` INT(10) UNSIGNED NOT NULL UNIQUE AUTO_INCREMENT,
`desc` VARCHAR(65535) NOT NULL,
`price` DECIMAL(5,2) NOT NULL,
`active` INT(1) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `product` (
`id` INT(10) UNSIGNED NOT NULL UNIQUE AUTO_INCREMENT,
`category_id` INT(3) UNSIGNED NOT NULL,
`symbol` VARCHAR(255),
`desc` VARCHAR(65535), 
`price` DECIMAL(5,2) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

il est possible de le créer?

  • Non, ce n'est pas possible. Votre clé étrangère a pour pointer vers un tableau, il ne peut point à table1, table2 ou tableau3 avec une clé étrangère. Vous pouvez le vérifier avant d'insertion et de avant de déclencheur de mise à jour si elle existe dans l'une des tables
  • Michael, de façon surprenante, il est possible dans certains Sgbd pour définir N>1 les clés étrangères sur le même domaine(s) et de les diriger vers les différentes tables. J'ai juste vérifié que dans MySQL 5.5, Oracle 11g et MS SQL 2012. Je pense que l'utilisation de la fonctionnalité est presque toujours une mauvaise idée, mais il n'est pas impossible (et peut être utile dans certains cas où les multiples tables référencées en tant que parent sont tous de la même entité logique). Voir stackoverflow.com/questions/19057188/...
InformationsquelleAutor insict | 2013-03-21