2009-07-12 8 views
0
 
I was just looking at the MySql database created by drupal after I installed it. 
All the tables are in MyISAM. 

With a complex software like drupal, wouldn't it make more sense to 
use foreign keys and hence InnoDB tables to enforce referential integrity? 

Without foreign keys all the constraint checking will happen at the 
PHP end. 
+0

On pourrait penser que Drupal voudrait préserver cette intégrité référentielle, mais ils pensaient que la possibilité d'utiliser n'importe quel fournisseur de base de données était plus importante. Pour plus d'informations/discussion, voir http://drupal.org/node/911352 P.S. Je sais que je poste dans un ancien poste, mais je veux aider ceux qui cherchent. –

Répondre

3

MySQL offre une variété de moteurs de base de données pour une raison - différents moteurs offrent différents avantages et inconvénients. InnoDB est un excellent moteur qui offre l'intégrité référentielle ainsi que la sécurité des transactions, mais il est mal optimisé pour le cas d'utilisation du site web où vous avez un ordre de grandeur plus de lectures puis d'écritures. MyISAM offre les meilleures performances pour un site Web où la plupart des hits ont seulement besoin d'un accès en lecture à la base de données. Dans de tels cas, l'intégrité référentielle peut le plus souvent être maintenue en écrivant vos insertions de données et en les supprimant de telle sorte qu'elles ne peuvent pas aboutir si elles compromettent l'intégrité. Par exemple, au lieu d'écrire

DELETE FROM mytable WHERE id = 5

vous pouvez écrire

SUPPRIMER matable DE GAUCHE matable REJOIGNEZ linkedtable SUR mytable.id = linkedtable.ref WHERE id = 5 ET linkedtable .ref IS NULL

Cela ne réussira à supprimer la ligne que s'il n'y a pas de références externes.

Questions connexes