2010-10-15 1 views
1

ли кто-нибудь опыты о совместимости массовой (коммерческие узлы) отношений какМассовая совместимость MySQL: использовать отношения и внешние ключи или нет?

FOREIGN KEY (`car`) REFERENCES `vehicles` (`id`) ON DELETE CASCADE ON UPDATE CASCADE 

я заметил, что другой широкое распространение PHP/MySQL приложения не использовать их, пока они кажутся очень полезными.

Любые знающие отрицательные побочные эффекты, о которых я должен знать? Благодарю.

ответ

1

Там нет «совместимости» проблемы с внешними ключами (или каскад), правила просты

  • InnoDB поддерживает его
  • MyISAM не

Вы выбираете, какой двигатель вам используйте в DDL вашей таблицы.

+0

Спасибо! Тем не менее, я до сих пор не понимаю, почему (просто для примера) phpBB использует InnoDB, но никаких внешних ключей (или каскадов) вообще. Я полагаю, что внешние ключи должны иметь определенный недостаток, о котором я (или мы) не знаем, и я боюсь, что некоторые хосты там запрещают InnoDB, а внешние ключи заблокированы (по соображениям производительности или что-то еще). – logtide

+0

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

+0

Однако в этом вы делаете полную противоположность тому, что предлагает хороший дизайн системы (что может быть в порядке - есть некоторые приложения, которые не являются системами в «система централизованной системы баз данных», но по-прежнему используют базу данных). Как правило, в дизайне системы вы пытаетесь сохранить правила целостности как можно ближе к базе данных; это хорошо и с точки зрения производительности, и с точки зрения целостности системы. Конечно, в этом есть некоторые накладные расходы, но сглаживание целостности для производительности в большинстве случаев сводится к снятию переднего ветрового экрана, чтобы получить более быстрый автомобиль. – Unreason

0

Они очень полезны, и вы должны использовать их, если сможете.

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

Для большинства целей InnoDB превосходит MyISAM. Я бы сказал, вы должны использовать MyISAM только если

  • у вас есть острый предел, сколько места вы можете использовать (таблицы InnoDB занимают изрядное немного больше пространства)
  • вам требуются возможности полнотекстового поиска (MyISAM для этой цели лучше).
+0

Спасибо, что поняли. – logtide

+0

В дополнение к вашему оригинальному вопросу ... Я не знаю, почему хостинг-провайдер ограничил бы использование внешних ключей и т. Д.Во всяком случае, использование внешних ключей заставляет вас следить за хорошими практиками, которые уменьшали бы работу, выполняемую СУБД, например, правильно индексируя таблицы (MySQL будет настаивать на индексировании любых столбцов внешнего ключа, также как и столбцы, которые они ссылаются) , Мой текущий общий хостинг не возражал против моего использования MySQL, и я использую ограничения внешнего ключа. – Hammerite

+0

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

1

Проблемы с совместимостью! Многие хостинговые компании деактивируют InnoDB, поэтому не используйте его, если это вам действительно не нужно. По этой причине я прекратил использовать Innodb.

Смежные вопросы