Найти тему
programmer's notes (python and more)

Реляционные базы данных. Связи между таблицами. Приложение к видео

Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.

Приложение к видео

Реляционные базы данных и связи между таблицами

Пересказывать лекцию не буду, изложу материал в несколько ином ключе. Начну вот с чего. Ранее я говорил, что появление такого понятия как первичный ключ (Primary Key - PK, ПК) обусловлено тем, что необходимо обеспечить уникальность строк таблицы. Поскольку строка таблицы является представлением экземпляра сущности, то уникальность строки таблицы выражает собой отличие экземпляра сущности от других подобных экземпляров. Эта утверждение называется сущностной целостностью. Таким образом первая функция первичного ключа есть обеспечение сущностной целостности.

Вторая функция ПК связана со связями между таблицами. Конечно, связи представляют собой отражение связей сущностей в предметной области. В лекции я рассматривал связь между сущностью Студент и сущностью Оценки. Связь эта должна быть выражена соответствующей связью между таблицами. Но когда мы переходим к таблицам мы должны конкретизировать механизм связи. И здесь нам становится нужен первичный ключ.

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

Сайт для простого моделирования реляционных баз данных
Сайт для простого моделирования реляционных баз данных

И так, у нас есть две таблицы: Студент и Оценки. Нам важно получить конструкцию, в которой мы сможем для каждого студента получить список его оценок. Это естественное требование и связь должна помочь нам сделать это. Может, конечно, появится вопрос: а почему нам всё это в одну таблицу не втиснуть? В принципе никто вам не помешает это сделать и я буду обсуждать такие конструкции в одной из следующих лекций. Сейчас же поясню кратко: и Студент и Оценки это две разные сущности и пытаться объединить их в одной не конструктивный подход.

Механизм связи следующий: поскольку каждый студент однозначно идентифицируется первичным ключом то можно добавить в таблицу Оценки еще один столбец, где будет значение первичного ключа того студента, кто получил эту оценку. В результате получаем (см. рисунок 1 ниже)

Рисунок 1. Две связанные таблицы PK-FK
Рисунок 1. Две связанные таблицы PK-FK

id_Студент это первичный ключ студента, который получил оценку. В таблице же Оценки он будет называться внешним ключом или Foreign Key (FK). Таким образом можно сказать, что связь между таблицами осуществляется по линии PK — FK. На рисунке 1 стрелка указывает на таблицу, первичный ключ которой участвует в реализации связи. Стрелка указывает на так называемую главную таблицу. При этом таблица Оценки будет считаться подчиненной или слабой таблицей. Можно провести и простое сущностное объяснение понятие силы и слабости. Сущность Студент вполне самостоятельна и может существовать вне зависимости от о сущности Оценки. Тогда как сущность Оценки не может существовать самостоятельно: оценка всегда ставится конкретному студенту.

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

Рисунок 2. Таблица Студент главная в паре Студент-Оценки и подчинённая в паре Факультет-Студент
Рисунок 2. Таблица Студент главная в паре Студент-Оценки и подчинённая в паре Факультет-Студент

На рисунке 2 появляется ещё одна таблица: Факультет. В паре Факультет - Студент, последняя таблица стала слабой.

Ранее я говорил о сущностной целостности. Существует также понятие ссылочная целостность. Вообще о понятии целостности я буду говорить в одной из следующих лекций. Но всё же скажу не много о целостности. связанной со связями между таблицами. В чём она выражается:

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

2. Ограничение по изменению значения первичного ключа в главной таблице.

3. Ограничение на добавление строки в подчинённую таблицу. Нельзя добавить строку со значением внешнего ключа, не соответствующего ни одному первичному ключу в главной таблице.

Ну, пока всё!

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

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