Database MySQL nuovo Octomon e integrazione con il vecchio...
Dunque, premetto che non sono espertissimo di database.
La situazione attuale è questa:
1. Il vecchio DB usa MyISAM come storage engine (che pare fosse il
default anni fa)
2. Django di default usa InnoDB, fra poche righe sarà chiaro il motivo
(in ogni caso si può dirgli tranquillamente di usare MyISAM, è una riga
di settings.py
)
Differenze fra i due storage engine? Questo è quello che ho dedotto leggendo la documentazione di MySQL (un sysadmin o un dbadmin potrebbero bruciarmi con lo sguardo..):
MyISAM
https://dev.mysql.com/doc/refman/5.7/en/myisam-storage-engine.html
Per farla breve, non supporta le transazioni né i vincoli di ForeignKey
InnoDB:
https://dev.mysql.com/doc/refman/5.7/en/innodb-storage-engine.html
Supporta sia le transazioni, che i vincoli di ForeignKey.
A quando pare le FK con le tabelle MyISAM sono semplicemente dei campi int, e MySQL non si occupa del controllo del vincolo dato che non c’è supporto a livello di storage engine.
La documentazione di MySQL dice che è possibile migrare da MyISAM a InnoDB, ma si va un po’ troppo sul tecnico per le mie conoscenze: https://dev.mysql.com/doc/refman/5.7/en/converting-tables-to-innodb.html
Probabilmente la mossa più corretta sarebbe quella di migrare il vecchio
db a InnoDB e lasciare Django col default.
Nell’ambiente di test (MySQL in locale con il dump del db di produzione)
ho avuto problemi col primo esperimento perché i vincoli intertabella
non funzionano se gli storage engine sono diversi (pagina di errore di
Django).
Però mi viene qualche dubbio, in primis questo:
Dato che MyISAM è “di manica larga”, a differenza di InnoDB che “fa il
database anziché fare finta”, cosa succede durante la migrazione in caso
di vincoli non rispettati nelle tabelle MyISAM?