Автор оригинала: Vlad Mihalcea.
Вступление
В реляционной базе данных связь формируется путем сопоставления строк, принадлежащих разным таблицам. Связь таблицы устанавливается, когда дочерняя таблица определяет столбец внешнего ключа, который ссылается на столбец первичного ключа родительской таблицы.
Таким образом, каждая связь таблиц базы данных строится поверх столбцов внешнего ключа, и может быть три типа связей таблиц:
- отношение “один ко многим” является наиболее распространенным, и оно связывает строку из родительской таблицы с несколькими строками в дочерней таблице.
- один к одному требует, чтобы первичный ключ дочерней таблицы был связан с помощью внешнего ключа со столбцом первичного ключа родительской таблицы.
- для многих ко многим требуется таблица ссылок, содержащая два столбца внешнего ключа, которые ссылаются на две разные родительские таблицы.
В этой статье мы опишем все эти три связи таблиц, а также их варианты использования.
Руководство для начинающих по связям таблиц базы данных @vlad_mihalcea https://t.co/84cgiDkUhc
Один Ко Многим
Отношение таблицы “один ко многим” выглядит следующим образом:
В системе реляционных баз данных отношение “один ко многим” связывает две таблицы на основе столбца внешнего ключа в дочернем элементе, который ссылается на Первичный ключ строки родительской таблицы.
На приведенной выше диаграмме таблицы столбец post_id в таблице post_comment имеет отношение внешнего ключа к столбцу post таблица идентификатор Первичный ключ:
ALTER TABLE
post_comment
ADD CONSTRAINT
fk_post_comment_post_id
FOREIGN KEY (post_id) REFERENCES post
Если вы хотите знать, какой лучший способ сопоставить отношения таблиц “один ко многим” с JPA и Hibernate, ознакомьтесь с этой статьей .
Один К Одному
Взаимосвязь таблиц “один к одному” выглядит следующим образом:
В системе реляционных баз данных связь таблиц “один к одному” связывает две таблицы на основе столбца первичного ключа в дочернем элементе, который также является внешним ключом, ссылающимся на Первичный ключ строки родительской таблицы.
Таким образом, мы можем сказать, что дочерняя таблица разделяет Первичный ключ с родительской таблицей.
На приведенной выше диаграмме таблицы столбец id в post_details таблица также имеет отношение внешнего ключа к столбцу post таблица идентификатор Первичный ключ:
ALTER TABLE
post_details
ADD CONSTRAINT
fk_post_details_id
FOREIGN KEY (id) REFERENCES post
Если вы хотите знать, какой лучший способ сопоставить отношения таблиц “один к одному” с JPA и Hibernate, ознакомьтесь с этой статьей .
Многие Ко Многим
Взаимосвязь таблиц “многие ко многим” выглядит следующим образом:
В системе реляционных баз данных связь “многие ко многим таблицам” связывает две родительские таблицы через дочернюю таблицу, которая содержит два столбца внешнего ключа, ссылающихся на столбцы первичного ключа двух родительских таблиц.
На приведенной выше диаграмме таблицы столбец post_id в таблице post_tag также связан внешним ключом со столбцом post таблица идентификатор Первичный ключ:
ALTER TABLE
post_tag
ADD CONSTRAINT
fk_post_tag_post_id
FOREIGN KEY (post_id) REFERENCES post
И столбец tag_id в таблице post_tag имеет отношение внешнего ключа к столбцу tag таблица идентификатор Первичный ключ:
ALTER TABLE
post_tag
ADD CONSTRAINT
fk_post_tag_tag_id
FOREIGN KEY (tag_id) REFERENCES tag
Если вы хотите знать, какой лучший способ сопоставить отношения таблиц “многие ко многим” с JPA и Hibernate, ознакомьтесь с этой статьей .
Вывод
Знание трех типов табличных отношений очень важно, особенно с учетом того, что чаще всего разработчик приложения использует несколько уровней абстракций при взаимодействии с базой данных.
Кроме того, при использовании инструмента ORM очень важно проверить связи таблиц, созданные платформой доступа к данным, чтобы убедиться, что они соответствуют стандартному определению и что они не пытаются имитировать связь с использованием неоптимального подхода.