Автор оригинала: 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 очень важно проверить связи таблиц, созданные платформой доступа к данным, чтобы убедиться, что они соответствуют стандартному определению и что они не пытаются имитировать связь с использованием неоптимального подхода.