Как правильно использовать внешние ключи - PullRequest
1 голос
/ 27 июня 2011

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

Есть ли хорошие уроки о том, как (и когда) использовать внешние ключи?

edit Часть, в которой я больше всего смущен - это ON DELETE.. ON UPDATE .. часть, скажем, у меня есть следующие таблицыудалить отдел или пользователя?

Ответы [ 2 ]

5 голосов
/ 27 июня 2011

ON DELETE и ON UPDATE относятся к тому, как изменения, вносимые вами в таблицу ключей, распространяются на зависимую таблицу.ОБНОВЛЕНИЕ означает, что значения ключей изменяются в зависимой таблице для поддержания отношения, а УДАЛЕНИЕ означает, что зависимые записи удаляются для поддержания целостности.

Пример: скажем, у вас есть

 Users: Name =  Bob, Department = 1
 Users: Name =  Jim, Department = 1
 Users: Name =  Roy, Department = 2

и

 Departments: id = 1, Name = Sales
 Departments: id = 2, Name = Bales

Теперь, если вы измените таблицу deparments, чтобы изменить первую запись для чтения id = 5, Name = Sales, то с помощью «UPDATE» вы также изменили бы первые две записи на чтение Department = 5 - и без«ОБНОВЛЕНИЕ», вам не разрешено вносить изменения!

Аналогично, если вы удалили Отдел 2, то с помощью «УДАЛИТЬ» вы также удалили бы запись для Роя!А без «УДАЛИТЬ» вам не разрешили бы удалить отдел, предварительно не удалив Роя.

2 голосов
/ 27 июня 2011

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

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

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

Хотя денормализация часто используется, когда эффективность является основным фактором при проектировании.Если это так, вы можете отойти от того, что я вам сказал.

Надеюсь, это поможет.

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