Какие виды связей (отношений) существуют в реляционных базах данных?

«Какие виды связей (отношений) существуют в реляционных базах данных?» — вопрос из категории Базы данных, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В реляционных БД существует три основных типа связей между таблицами:

  1. Один к одному (One-to-One, 1:1): Одна запись в таблице А связана не более чем с одной записью в таблице Б, и наоборот. Часто используется для разделения редко используемых или чувствительных данных.

    • Пример (DevOps-контекст): Таблица servers (основные данные) и server_secrets (пароли, ключи).
  2. Один ко многим (One-to-Many, 1:N): Одна запись в таблице А может быть связана с несколькими записями в таблице Б, но запись в Б ссылается только на одну запись в А. Самый распространенный тип.

    • Пример: Таблица environments (prod, stage) и таблица deployments. В одно окружение может быть сделано множество деплоев.
  3. Многие ко многим (Many-to-Many, M:N): Записи в таблице А могут быть связаны с несколькими записями в таблице Б, и наоборот. Реализуется через промежуточную таблицу связей (junction table).

    • Пример (DevOps): Таблица servers и таблица applications. Один сервер может хостить несколько приложений, а одно приложение может быть развернуто на нескольких серверах (кластер).
-- Пример связи M:N для серверов и приложений
CREATE TABLE servers (
    id SERIAL PRIMARY KEY,
    hostname VARCHAR(255) NOT NULL
);

CREATE TABLE applications (
    id SERIAL PRIMARY KEY,
    name VARCHAR(255) NOT NULL
);

-- Промежуточная таблица
CREATE TABLE server_application (
    server_id INT REFERENCES servers(id) ON DELETE CASCADE,
    application_id INT REFERENCES applications(id) ON DELETE CASCADE,
    PRIMARY KEY (server_id, application_id)
);