Каковы преимущества явной настройки отношений внутри базы данных - PullRequest
2 голосов
/ 08 июля 2010

При создании схемы базы данных и придумали все внешние ключи. Каковы преимущества явного определения их как таковых в базе данных?

Есть ли преимущества?

Если это зависит от MySQL, то я буду использовать БД.

Ответы [ 3 ]

4 голосов
/ 08 июля 2010

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

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

Менее формально и в отношениях базы данных: для ссылочной целостности держать любое поле в таблице, которая объявленный внешний ключ может содержать только значения из родительской таблицы первичный ключ или ключ-кандидат. За например, удаление записи, которая содержит значение, на которое ссылается внешний ключ в другой таблице будет нарушать ссылочную целостность. Немного системы управления реляционными базами данных (RDBMS) может применять ссылочный целостность, обычно либо путем удаления строки внешнего ключа, а также поддерживать целостность или возвращая ошибка и не выполняет удаление. Какой метод используется, может быть определено ограничением ссылочной целостности определено в словаре данных.


alt text

Пример базы данных, которая не имеет принудительная ссылочная целостность. В В этом примере есть внешний ключ (artist_id) значение в таблице альбома который ссылается на несуществующего художника - другими словами, есть иностранный значение ключа без соответствующего значение первичного ключа в ссылке Таблица. То, что произошло здесь, было там был художник по имени "Aerosmith", с номерами Artist_id "4", который был удален из художника Таблица. Тем не менее, альбом "Ешьте Богатые »ссылаются на этого художника. соблюдение ссылочной целостности, это не было бы возможно.

Чтобы создать внешний ключ между двумя таблицами с MySQL, обе таблицы должны быть таблицами InnoDB (с типом таблицы MyISAM по умолчанию можно «определить» внешний ключ, но на самом деле это не так. Делать что-нибудь).

2 голосов
/ 09 июля 2010

Целостность данных - ограничение помогает обеспечить согласованность данных в разных таблицах. Дополнительным преимуществом является то, что ограничения доступны для оптимизатора запросов СУБД, что поможет оптимизировать производительность некоторых запросов.

1 голос
/ 08 июля 2010

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

...