Внешний ключ - Отношения между ребенком и родителями

0

Я новичок в SQL. У меня возникают трудности с пониманием отношений между родителями-родителями. В книге "Системы баз данных Томасом Коналли" упоминается, что "если ключ forign в дочерней таблице равен нулю, участие дочерней таблицы заполняется в отношениях". Как заполнение дочернего стола может быть заполнено, если внешний ключ недействителен? Пожалуйста, кто-нибудь может объяснить эту концепцию. Спасибо!

  • 0
    Не имеет никакого смысла для меня тоже :)
Теги:
relational-database

1 ответ

0

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

Итак, у вас есть parent_table: PK IDnumber, Name, Location, PhoneNumber.

И child_table: FK parent_table.IDnumber, PK LocNumber, OfficeLocation, OfficeAddress, OfficeCity.

У вас есть общие типы отношений: один-один, один-много, много-много (для таблиц, а также полей.) И конкретные отношения: deny, restrict, cascade, nullify, set default. Общие отношения в основном связаны с тем, сколько записей в parent_table связано/связано с тем, сколько записей в child_table или полях связано с другими полями в одной таблице. Конкретные отношения говорят о том, что происходит с соответствующими записями в child_table, когда мы добавляем/модифицируем/удаляем запись parent_table с тем же ключом (IDnumber).

При таком понимании "полное участие дочерней таблицы" связано с тем, что дочерняя таблица участвует в действиях, которые происходят в родительском. Обычно это делается путем установки поля внешнего ключа NOT NULL/minimum = 1. Таким образом, действия в родительской таблице в записи будут влиять на все записи child_table с соответствующим внешним ключом.

Например, если вы удалите запись родительской таблицы с номером ID 123, какое действие вы хотите выполнить в дочерней таблице для всех записей с внешним ключом IDnumber = 123? Удалите оба (или Cascade), сохраняйте, но отмечайте как неактивные (Deny), не разрешайте удаление родительской таблицы, если существуют записи дочерних таблиц с соответствующим внешним ключом (Ограничить)? Использование отношения Ограничение обычно является наилучшей практикой.

Там больше правил и рекомендаций для отношений, но я надеюсь, что это ответили на ваш вопрос.

  • 0
    Это то, что я хотел. Огромное спасибо:)
  • 0
    Рад, что смог помочь.

Ещё вопросы

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