Вопрос проектирования базы данных Drupal MySql - PullRequest
0 голосов
/ 12 июля 2009
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.

1 Ответ

3 голосов
/ 12 июля 2009

MySQL предлагает различные механизмы баз данных по разным причинам - разные механизмы предлагают разные преимущества и недостатки. InnoDB - отличный движок, который обеспечивает ссылочную целостность и безопасность транзакций, но он плохо оптимизирован для случая использования веб-сайта, где у вас на порядок больше операций чтения, чем записи.

MyISAM предлагает лучшую производительность для веб-сайта, где большинству хитов нужен только доступ для чтения к базе данных. В таких случаях ссылочная целостность чаще всего может поддерживаться путем записи вставок и удалений данных таким образом, что они не могут добиться успеха, если они нарушают целостность. Например, вместо записи

УДАЛИТЬ ИЗ mytable WHERE id = 5

Вы можете написать

УДАЛИТЬ mytable ИЗ mytable СЛЕДУЮЩЕЕ СОЕДИНЕНИЕ Соединенная таблица ON mytable.id = connectedtable.ref WHERE id = 5 И Linktable.ref IS NULL

Это удастся удалить строку только тогда, когда на нее нет внешних ссылок.

...