Как наладить связи в бд?

Связи в базе данных PostgreSQL устанавливаются с использованием ключевых слов FOREIGN KEY и REFERENCES, и представляют собой способ организации связей между таблицами.

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

Связь один-ко-многим создается путем добавления столбца с внешним ключом в таблицу, который ссылается на первичный ключ связанной таблицы. Например, предположим, у нас есть таблица customers и таблица orders. Для того, чтобы установить связь между ними, мы можем добавить в таблицу orders столбец customer_id, который будет ссылаться на первичный ключ (id) таблицы customers. Вот как будет выглядеть SQL-запрос для создания связи:

CREATE TABLE customers (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100)
);

CREATE TABLE orders (
    id SERIAL PRIMARY KEY,
    customer_id INTEGER REFERENCES customers(id),
    order_date DATE,
    order_total NUMERIC(10,2)
);

Связь многие-к-одному работает аналогично связи один-ко-многим, только наоборот. В данном случае внешний ключ будет находиться в таблице, на которую ссылаются, и ссылаться на первичный ключ таблицы, которая ссылается. Например, предположим, у нас есть таблицы employees и departments. Мы можем добавить в таблицу employees столбец department_id, который будет ссылаться на первичный ключ (id) таблицы departments. Вот SQL-запрос для создания связи:

CREATE TABLE departments (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100)
);

CREATE TABLE employees (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100),
    department_id INTEGER REFERENCES departments(id)
);

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

Для создания такой связи нам нужно создать таблицу-связь, которая будет содержать внешние ключи для ссылки на первичные ключи таблиц students и courses. Вот SQL-запрос для создания связи многие-к-многим:

CREATE TABLE students (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100)
);

CREATE TABLE courses (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100)
);

CREATE TABLE enrollments (
    student_id INTEGER REFERENCES students(id),
    course_id INTEGER REFERENCES courses(id),
    PRIMARY KEY(student_id, course_id)
);

Это основные способы установки связей в базе данных PostgreSQL. Они позволяют создавать структурированные данные, в которых можно легко определить связи между таблицами и эффективно извлекать данные с использованием операторов JOIN.