22. DB Design: Relationships
Типы связей между таблицами: One-to-One, One-to-Many, Many-to-Many.
One-to-One (1:1)
Заголовок раздела «One-to-One (1:1)»Один к одному. Редко используется.
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));Применение: Разделение редко используемых данных.
One-to-Many (1:N)
Заголовок раздела «One-to-Many (1:N)»Один ко многим. Самый распространённый тип.
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);Many-to-Many (N:M)
Заголовок раздела «Many-to-Many (N:M)»Многие ко многим. Требует промежуточную таблицу.
CREATE TABLE students ( id SERIAL PRIMARY KEY, name VARCHAR(100));
CREATE TABLE courses ( id SERIAL PRIMARY KEY, title VARCHAR(200));
-- Junction tableCREATE 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));Cascade операции
Заголовок раздела «Cascade операции»-- ON DELETE CASCADE - автоудаление связанных записейCREATE TABLE posts ( id SERIAL PRIMARY KEY, user_id INT REFERENCES users(id) ON DELETE CASCADE);
-- ON UPDATE CASCADECREATE TABLE orders ( id SERIAL PRIMARY KEY, customer_id INT REFERENCES customers(id) ON UPDATE CASCADE);
-- SET NULL / SET DEFAULTCREATE TABLE comments ( id SERIAL PRIMARY KEY, user_id INT REFERENCES users(id) ON DELETE SET NULL);Следующий урок: Денормализация →