ho affrontato un problema simile quando la migrazione di un sito per Rails. ho avuto un tavolo che memorizza il testo da ta per ogni lingua il mio sito è disponibile così ho avuto qualcosa di simile:
CREATE TABLE Project_Lang(
project_id INT NOT NULL,
language_id INT NOT NULL,
title VARCHAR(80),
description TEXT,
PRIMARY KEY pk_Project_Lang(project_id, language_id),
FOREIGN KEY fk_Project_Lang_Project(project_id)
REFERENCES Project(project_id)
ON DELETE RESTRICT ON UPDATE CASCADE,
FOREIGN KEY fk_Project_Lang_Language(language_id)
REFERENCES Language(language_id)
ON DELETE RESTRICT ON UPDATE CASCADE
)ENGINE = InnoDB DEFAULT CHARACTER SET = utf8 DEFAULT COLLATE = utf8_spanish_ci;
Ma poiché Rails non gestisce le chiavi primarie composite, fuori dalla scatola sono stato costretto a cambiare la struttura della tabella in modo che aveva è propria chiave primaria:
CREATE TABLE Project_Lang(
project_lang_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
project_id INT NOT NULL,
language_id INT NOT NULL,
title VARCHAR(80),
description TEXT,
UNIQUE INDEX(project_id, language_id),
FOREIGN KEY fk_Project_Lang_Project(project_id)
REFERENCES Project(project_id)
ON DELETE RESTRICT ON UPDATE CASCADE,
FOREIGN KEY fk_Project_Lang_Language(language_id)
REFERENCES Language(language_id)
ON DELETE RESTRICT ON UPDATE CASCADE
)ENGINE = InnoDB DEFAULT CHARACTER SET = utf8 DEFAULT COLLATE = utf8_spanish_ci;
ho anche creato un indice univoco per le colonne che precedentemente hanno fatto la chiave primaria composta in modo che non siano inseriti record duplicato. Quindi nel mio modello Rails potrei semplicemente:
self.primary_key = "project_lang_id"
E questo ha fatto il trucco. Non è quello che volevo ma è meglio che combattere la struttura.
se la parola appartiene a un linguaggio perché è necessario memorizzare il lang con esso? Puoi semplicemente delegarlo al modello di lingua. Detto questo, combatterai le rotaie. Vorrei solo usare la chiave ID come chiave primaria. delegato: lang to Language e non preoccuparti per la chiave composita – Doon
davvero, grazie. : lang sta arrivando da un ponteggio. Devo rimuoverlo da qui poiché utilizzo il modello di linguaggio. Thx –