edit - Basé sur les réponses ci-dessous, je vais revoir mon design. Je pense que je peux éviter ce gâchis en étant un peu plus intelligent avec la façon dont je définis mes objets et règles métier. Merci à tous pour votre aide!Relations avec les clés étrangères et "appartient à beaucoup"
-
I ont le modèle suivant:
S appartient à T
T a beaucoup S
A, B, C, D, E (etc) ont une Tout d'abord, je configure mes clés étrangères de sorte que dans A, fk_a_t soit la clé étrangère sur At to T (id), dans B ce serait fk_b_t, etc. La chose semble bien dans mon UML (en utilisant MySQLWorkBench), mais en générant les modèles yii, on pense que T a beaucoup de A, B, C, D (etc) ce qui pour moi est l'inverse.
Il me semble que j'ai besoin de tables A_T, B_T, C_T (etc), mais ce serait pénible car il y a beaucoup de tables qui ont cette relation. J'ai aussi googlé que la meilleure façon de le faire serait une sorte de comportement, tel que A, B, C, D (etc) peut se comporter comme un T, mais je ne sais pas exactement comment faire cela (Je vais continuer à google plus sur ceci)
EDIT - pour clarifier, un T peut appartenir seulement à un de A, ou B, ou C, (etc) et pas deux A, ni A et un B (que c'est, ce n'est pas beaucoup à beaucoup). Ma question concerne la façon de décrire cette relation dans les modèles Yii Framework - par exemple, (A, B, C, D, ...) HAS_ONE T, et T appartient à (A, B, C, D, .. .). D'un cas d'utilisation métier, tout cela a du sens, mais je ne suis pas sûr si je l'ai correctement configuré dans la base de données, ou si je le fais, que j'ai besoin d'utiliser un "comportement" dans Yii pour lui faire comprendre la relation . @rwmnau Je comprends ce que vous voulez dire, j'espère que ma clarification aide.
UML: uml diagram http://www.freeimagehosting.net/uploads/fd8efa2f1d.png
est ici le DDL (généré automatiquement). Il suffit de faire semblant qu'il n'y a plus de 3 tables faisant référence à T.
-- -----------------------------------------------------
-- Table `mydb`.`T`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`T` (
`id` INT NOT NULL AUTO_INCREMENT ,
PRIMARY KEY (`id`))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`S`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`S` (
`id` INT NOT NULL AUTO_INCREMENT ,
`thing` VARCHAR(45) NULL ,
`t` INT NOT NULL ,
PRIMARY KEY (`id`) ,
INDEX `fk_S_T` (`id` ASC) ,
CONSTRAINT `fk_S_T`
FOREIGN KEY (`id`)
REFERENCES `mydb`.`T` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`A`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`A` (
`id` INT NOT NULL AUTO_INCREMENT ,
`T` INT NOT NULL ,
`stuff` VARCHAR(45) NULL ,
`bar` VARCHAR(45) NULL ,
`foo` VARCHAR(45) NULL ,
PRIMARY KEY (`id`) ,
INDEX `fk_A_T` (`T` ASC) ,
CONSTRAINT `fk_A_T`
FOREIGN KEY (`T`)
REFERENCES `mydb`.`T` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`B`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`B` (
`id` INT NOT NULL AUTO_INCREMENT ,
`T` INT NOT NULL ,
`stuff2` VARCHAR(45) NULL ,
`foobar` VARCHAR(45) NULL ,
`other` VARCHAR(45) NULL ,
PRIMARY KEY (`id`) ,
INDEX `fk_A_T` (`T` ASC) ,
CONSTRAINT `fk_A_T`
FOREIGN KEY (`T`)
REFERENCES `mydb`.`T` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`C`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`C` (
`id` INT NOT NULL AUTO_INCREMENT ,
`T` INT NOT NULL ,
`stuff3` VARCHAR(45) NULL ,
`foobar2` VARCHAR(45) NULL ,
`other4` VARCHAR(45) NULL ,
PRIMARY KEY (`id`) ,
INDEX `fk_A_T` (`T` ASC) ,
CONSTRAINT `fk_A_T`
FOREIGN KEY (`T`)
REFERENCES `mydb`.`T` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
Pouvez-vous poster le diagramme et/ou le DDL? Ce serait bien de voir à quoi ça ressemble. –
Un peu trop abstrait pour moi. Pouvez-vous publier des structures de tables d'échantillons? – Oded
J'ai ajouté des diagrammes et DDL, et j'espère clarifié ma question. – jan