Ответ
Отношения (связи) между таблицами в реляционной БД определяют, как строки одной таблицы соотносятся со строками другой. Основные типы:
-
Один к одному (One-to-One, 1:1) Каждой записи в таблице A соответствует не более одной записи в таблице B, и наоборот. Часто используется для разделения редко используемых или конфиденциальных данных.
CREATE TABLE users ( user_id INT PRIMARY KEY, username VARCHAR(50) NOT NULL ); CREATE TABLE user_profiles ( profile_id INT PRIMARY KEY, user_id INT UNIQUE NOT NULL, -- Ключ для связи 1:1 passport_data VARCHAR(100), FOREIGN KEY (user_id) REFERENCES users(user_id) ); -
Один ко многим (One-to-Many, 1:N) Наиболее распространённый тип. Одна запись в таблице «родитель» (A) может быть связана с несколькими записями в таблице «потомок» (B).
CREATE TABLE authors ( author_id INT PRIMARY KEY, name VARCHAR(100) ); CREATE TABLE books ( book_id INT PRIMARY KEY, title VARCHAR(200), author_id INT, -- Внешний ключ, ссылается на authors FOREIGN KEY (author_id) REFERENCES authors(author_id) ); -- Один автор (author_id = 1) может написать много книг. -
Многие ко многим (Many-to-Many, M:N) Реализуется через промежуточную таблицу (junction/association table). Каждая запись в таблицах A и B может быть связана со многими записями другой таблицы.
CREATE TABLE students (student_id INT PRIMARY KEY, name VARCHAR(100)); CREATE TABLE courses (course_id INT PRIMARY KEY, title VARCHAR(100)); -- Промежуточная таблица CREATE TABLE enrollments ( student_id INT, course_id INT, enrollment_date DATE, PRIMARY KEY (student_id, course_id), FOREIGN KEY (student_id) REFERENCES students(student_id), FOREIGN KEY (course_id) REFERENCES courses(course_id) ); -- Студент может записаться на несколько курсов, и на курс может быть записано много студентов.Правильное проектирование связей обеспечивает целостность данных, устраняет аномалии и дублирование.