Страницы

Поиск по вопросам

суббота, 4 января 2020 г.

Как первичным ключом могут быть сразу несколько столбцов в sql?

#mysql #sql


Привет. 

Вопрос по sql. Не понимаю насчет идентифицирующей и не идентифицирующей связей (в
workbench это сплошная и пунктирная линии). Связи таблиц реализуются через ключи-столбцы.

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

Написано, что "Идентифицирующей связью называется такая связь, в которой один или
несколько столбцов ключа (напомним, что ключ может состоять из нескольких столбцов),
указанные в ссылке (т.е. находящиеся в родительской таблице), используются в качестве
всего первичного ключа или части первичного ключа ссылающейся (т.е. дочерней) таблицы." 

Не понимаю, как ключом могут быть сразу **несколько столбцов**. Насчет одного столбца
понимаю - например, в главной таблице есть столбец с номером препода (1, 2, 3..), а
в таблице-справочнике эти числа расшифровываются (1 - это Иванов, 2 - Петров...).
    


Ответы

Ответ 1



Проще объяснить на примере. Есть у вас таблица "Дом" и таблица "Квартира". В первой таблице ключом будет набор столбцов: "Страна - Область - Город - Улица - Номер дома". Ни один из этих столбцов по отдельности ключом не является (не определяет уникальный дом), ключом является только их полный набор. Во второй таблице ключом будет набор столбцов "Страна - Область - Город - Улица - Номер дома - Номер квартиры". Т.о. ключ дочернего объекта полностью включает в себя ключ родительского объекта, поэтому связь является идентифицирующей. А вот если мы добавим таблицу "Этажи" с цифрами "1, 2, 3" и т.д. и в таблицу "Квартира" добавим поле, которое будет ссылаться на таблицу "Этажи", но не будет входить в ключ, то такая связь будет не идентифицирующей. На всякий случай - это не пример того, как надо проектировать базу. Это не очень хороший паттерн, тут лучше ввести суррогатный ключ из одной колонки для удобства использования. Этот пример дан чисто для описания понятий.

Комментариев нет:

Отправить комментарий