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

0

У меня есть таблица пользователей, в которой в качестве первичного ключа используется user_id, и она используется в других таблицах от 40 до 50 (приблизительно). Необходимо ли определять столбец user_id как внешний ключ в каждой таблице, где используется user_id?

  • 1
    Определите «необходимо» в этом контексте. Необходимо достичь чего? Во всяком случае, это очень рекомендуется ...
  • 2
    Уроки истории очевидны: если вы не задействуете внешний ключ, у вас в конечном итоге появятся потерянные записи в дочерних таблицах.
Теги:
database
db2

2 ответа

3

Это зависит. RI/FK были введены в Oracle в v7, поэтому базы данных наиболее определенно существовали без них, а некоторые все еще существуют. Но обычно их определяют и включают, поскольку вы в основном получаете эту проверку "бесплатно".

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

Тем не менее, я еще раз подчеркиваю, что FK/RI в целом хороши, и я бы перевернул ваш вопрос, чтобы сказать: "Когда мне следует подумать об отсутствии FK?".

По моему опыту, вы чаще всего будете находить это отсутствующим из-за лени со стороны разработчиков.

  • 1
    and the order in which parent/child data was posted to the database from the application management layer could not be guaranteed. ... это звучит как настоящая проблема, которую нужно решить, или, по крайней мере, симптом какой-то другой проблемы.
1

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

  • 1
    Если база данных использует отношение FK для «быстрого поиска данных», это почти наверняка побочный эффект от того, как обычно применяются ключи - с (одним или несколькими) индексами. Проверка и сохранение данных на основе таких ключей почти всегда будет иметь обновление времени (в отличие от запроса времени) исполнение пенальти.
  • 0
    Поля FK индексируются, поэтому, чтобы найти их, они быстрее, чем не проиндексированы, но для вставки и удаления база данных проверяет ограничение, для этих операций база данных медленнее.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню