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.
Répondre
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.
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. –