Перейти к содержимому

22. DB Design: Relationships

Типы связей между таблицами: One-to-One, One-to-Many, Many-to-Many.

Один к одному. Редко используется.

CREATE TABLE users (
id SERIAL PRIMARY KEY,
username VARCHAR(50)
);
-- Расширенная информация (необязательная)
CREATE TABLE user_profiles (
user_id INT PRIMARY KEY REFERENCES users(id),
bio TEXT,
avatar_url VARCHAR(500)
);

Применение: Разделение редко используемых данных.

Один ко многим. Самый распространённый тип.

CREATE TABLE authors (
id SERIAL PRIMARY KEY,
name VARCHAR(100)
);
CREATE TABLE books (
id SERIAL PRIMARY KEY,
title VARCHAR(200),
author_id INT REFERENCES authors(id) -- FK
);

Многие ко многим. Требует промежуточную таблицу.

CREATE TABLE students (
id SERIAL PRIMARY KEY,
name VARCHAR(100)
);
CREATE TABLE courses (
id SERIAL PRIMARY KEY,
title VARCHAR(200)
);
-- Junction table
CREATE TABLE enrollments (
student_id INT REFERENCES students(id),
course_id INT REFERENCES courses(id),
enrolled_at TIMESTAMP DEFAULT NOW(),
PRIMARY KEY (student_id, course_id)
);
-- ON DELETE CASCADE - автоудаление связанных записей
CREATE TABLE posts (
id SERIAL PRIMARY KEY,
user_id INT REFERENCES users(id) ON DELETE CASCADE
);
-- ON UPDATE CASCADE
CREATE TABLE orders (
id SERIAL PRIMARY KEY,
customer_id INT REFERENCES customers(id) ON UPDATE CASCADE
);
-- SET NULL / SET DEFAULT
CREATE TABLE comments (
id SERIAL PRIMARY KEY,
user_id INT REFERENCES users(id) ON DELETE SET NULL
);

Следующий урок: Денормализация