Должен ли я действительно использовать внешние ключи? - PullRequest
8 голосов
/ 06 января 2012

Должен ли я использовать внешние ключи для каждой связанной таблицы или нет? Если я должен использовать, почему?

Ответы [ 6 ]

8 голосов
/ 06 января 2012

Вы должны. Есть три основных момента:

  • В зависимости от вашей системы баз данных, вы можете получить лучшую производительность
  • Внешние ключи обеспечивают целостность данных, например, может помочь избежать бесхозных записей и т. д.
  • Это явный способ документировать структуру вашей БД, которая может использоваться инструментами для визуализации, генерации кода и т. Д.
7 голосов
/ 06 января 2012

Использование внешних ключей является одним из основ (если не единственным) основного понятия реляционных баз данных. Вы, конечно, должны использовать внешние ключи, где это необходимо. Потому что это помогает:

  1. Убедитесь в достоверности и достоверности данных
  2. Экономьте много дополнительного пространства

Первый означает вместо добавления значения вручную в поле, которое будет повторяться для других записей, которые вы просто выбираете из того, что есть в связанной таблице первичного ключа. Если вы попытаетесь ввести то, что не существует в качестве первичного ключа, в другой таблице, вы будете отклонены (хотя в некоторых базах данных вы можете настроить это поведение).

Второй означает, что вам не нужно каждый раз писать «Соединенные Штаты Америки», что занимало бы намного больше места, чем просто написание удостоверения личности «Соединенных Штатов Америки».

7 голосов
/ 06 января 2012

«Все связанные таблицы» не всегда понятны, поэтому это не очевидная ситуация. Могут быть таблицы, которые имеют общий столбец, но никогда не видят друг друга.

Однако это удобно для предотвращения ошибок, которые проскальзывают мимо вашей основной защиты и позволяют вводить данные, которые трудно отследить.

Они не помогут сделать запросы более эффективными, если у вас есть правильные индексы, и хорошее приложение отфильтрует входные данные настолько, что они никогда не понадобятся. Но ошибки случаются, и это дешевая линия защиты.

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

Вот немного фона -

Что не так с внешними ключами?

6 голосов
/ 06 января 2012

Да.Но на умеренных уровнях.Это помогает, когда вы запрашиваете данные.Это помогает в индексации ваших данных, поэтому ускоряет запросы.Также это помогает поддерживать отношения между сущностями.

5 голосов
/ 06 января 2012

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

3 голосов
/ 06 января 2012

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

Это означает, что иногда нецелесообразно или нецелесообразно предполагать немедленную согласованность данных.

Прочитайте базу данных на основе NoSQL, MongoDB CouchDB и четную согласованность, если вам интересно.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...