Дизайн базы данных: какой смысл определять внешние ключи? - PullRequest
2 голосов
/ 24 ноября 2010

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

В моих таблицах есть фактический столбец для внешних ключей, я просто не определил их в MySQL Workbench. То есть у меня нет этих линий, соединяющих таблицы.

Ответы [ 6 ]

4 голосов
/ 24 ноября 2010

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

Интересно, что оптимизатор запросов вашей любимой СУБД также может использовать ограничения, такие как внешние ключи, для дополнительной оптимизации.По сути, база данных может определить, может ли она лучше написать запрос, чем вы.Наличие внешних ключей позволяет базе данных делать эти предположения.Вы можете найти отличный пример на Помогают ли ограничения по внешнему ключу производительность? .Хотя эта ссылка специфична для SQL Server, принцип одинаков независимо от механизма базы данных.

3 голосов
/ 24 ноября 2010

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

2 голосов
/ 29 ноября 2010

Вот некоторые преимущества, которые вы получаете от использования отношений внешнего ключа:

  1. Ссылочная целостность (конечно)
  2. Оптимизатор может в некоторых случаях генерировать лучшие планы выполнения
  3. Поддержка инструментов (метаданные, миграция, анализ и т. Д.)

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

2 голосов
/ 25 ноября 2010

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

1 голос
/ 24 ноября 2010

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

0 голосов
/ 24 ноября 2010

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

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