Problemi con l'aggiunta di relazioni FK via Dottrina Corporatura Task
-
28-09-2019 - |
Domanda
Ho ricontrollato il mio schema e la sua dottrina corretta ... infatti anche costruito una volta .. e ora il suo mi preoccupa con alcune relazioni FK ... Ho controllato per i tipi di dati pure. Tutti sono int (4) o int (2)
2 Qs qui: 1. Esiste un limite superiore per il no di relazioni (dipendenze / FKS) una tabella può avere? Ho fino a 7 FKS in un tabelle 2. Esiste un limite superiore per il no di tabelle che si riferiscono una tabella padre (PK)? Ho fino a 30 campi a 20 tavoli riferimento a una colonna ID unico nella tabella Opzioni 3. è la definizione per il comportamento CASCASE richiesto? Non ho usato!
E 'meglio vivere senza relazioni, in questo caso?
L'errore è:
SQLSTATE[HY000]: General error: 1005 Can't create table 'sokidb.#sql-268_1d' (errno: 121). Failing Query: "ALTER TABLE Acc_Gl_Accounts ADD CONSTRAINT Acc_Gl_Accounts_society_id_Soc_Societies_id FOREIGN KEY (society_id) REFERENCES Soc_Societies(id)". Failing Query: ALTER TABLE Acc_Gl_Accounts ADD CONSTRAINT Acc_Gl_Accounts_society_id_Soc_Societies_id FOREIGN KEY (society_id) REFERENCES Soc_Societies(id)
Inoltre ho sparato le query in MySQL direttamente, il risultato e 'lo stesso errore.
Soluzione
La gente, in questi ultimi giorni mi sono reso conto che probabilmente non c'è problema noto con Doctrine.
Il mio errore è stato che avevo definito un'opzione per la mia chiave in una tabella 'unsigned: true' e non ripetuto lo stesso per la definizione FK :( Tutta colpa mia, ma la soluzione è doppio controllo i tuoi tipi di dati.
E il modo migliore per errori correlati a MySQL di debug è quello di verificare lo script SQL generato. Si può facilmente individuare differenze nelle definizioni di colonne.
Grazie John, per il vostro interesse.
Altri suggerimenti
probabilmente si sta utilizzando le tabelle InnoDB, che è di default per le versioni di MySQL moderni e di sperimentare un errore di vincolo ForeignKey. Leggi qui per un elenco completo di requerments.
corrispondente colonne nella estera chiave e la chiave indicata deve avere simile interna tipi di dati all'interno InnoDB in modo che possano essere confrontati senza una conversione di tipo. La dimensione e segno di tipi interi deve essere il stesso. La lunghezza dei tipi stringa necessità non essere la stessa. per non binari (caratteri) colonne stringa, la set di caratteri e collazione devono essere lo stesso.