Что такое "отношение" (relation) в SQL и как оно связывает сущности базы данных?
Подсказки:
- Подумайте о том, как таблицы связаны через ключи (первичные и внешние).
- Рассмотрите различные типы отношений, такие как один-к-одному (one-to-one), один-ко-многим (one-to-many) или многие-ко-многим (many-to-many).
- Нормальные формы (от 1NF до 5NF)
- Подумайте о том, как отношения поддерживают целостность данных и обеспечивают соблюдение бизнес-правил в базе данных.
Выше ожиданий:
- Ограничения целостности ссылок
- Junktions таблицы
- Мощность (кардинальность) и степень отношений (унарные, бинарные, тернарные)
Отношения в SQL представляют логическую связь между сущностями (таблицами) в базе данных. Эти связи определяют, как данные в одной таблице соотносятся с данными в другой таблице. Отношения являются фундаментальными для проектирования реляционных баз данных, так как они позволяют обеспечить нормализацию данных, целостность и эффективное запросы.
Типы отношений
Один к одному (1:1)
Каждая запись в первой таблице связана ровно с одной записью во второй таблице.
CREATE TABLE employees (
employee_id INT PRIMARY KEY,
name VARCHAR(100),
position VARCHAR(100)
);
CREATE TABLE employee_details (
detail_id INT PRIMARY KEY,
employee_id INT UNIQUE,
address VARCHAR(200),
phone VARCHAR(20),
FOREIGN KEY (employee_id) REFERENCES employees(employee_id)
);
Один ко многим (1:N)
Каждая запись в первой таблице может быть связана с несколькими записями во второй таблице.
CREATE TABLE departments (
department_id INT PRIMARY KEY,
department_name VARCHAR(100)
);
CREATE TABLE employees (
employee_id INT PRIMARY KEY,
name VARCHAR(100),
department_id INT,
FOREIGN KEY (department_id) REFERENCES departments(department_id)
);
Многие ко многим (M:N)
Записи в обеих таблицах могут быть связаны с несколькими записями в другой таблице. Требуется juncion table (также называемая связующей или ассоциативной таблицей).
CREATE TABLE students (
student_id INT PRIMARY KEY,
student_name VARCHAR(100)
);
CREATE TABLE courses (
course_id INT PRIMARY KEY,
course_name 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)
);
Ключевые компоненты отношений
Ключи
- Первичные ключи: Уникально идентифицируют каждую запись в таблице
- Внешние ключи: Ссылаются на первичный ключ в другой таблице, чтобы установить связь
- Составные ключи: Несколько столбцов, работающих вместе, чтобы сформировать уникальный идентификатор
Ограничения
- Целостность ссылок: Обеспечивает, что связи между таблицами остаются согласованными
- Действия ON DELETE/UPDATE:
- CASCADE: Автоматически удаляет/обновляет связанные записи
- SET NULL: Устанавливает значения внешнего ключа в NULL
- RESTRICT/NO ACTION: Препятствует изменениям, которые нарушили бы связи
- SET DEFAULT: Устанавливает значение по умолчанию
Степень отношений
- Унарное отношение: Таблица относится к самой себе (например, сотрудники и менеджеры)
- Бинарное отношение: Между двумя таблицами (наиболее распространенное)
- Тернарное отношение: Между тремя таблицами
Мощность (кардинальность)
Мощность определяет числовое отношение между экземплярами сущностей:
- Минимальная мощность: Минимальное количество отношений (0 = необязательно, 1 = обязательно)
- Максимальная мощность: Максимальное количество отношений (1, N)
Нормализация и Отношения
Отношения поддерживают процесс нормализации, позволяя разбить данные по нескольким таблицам:
- 1NF: Устранение повторяющихся групп, установление первичных ключей
- 2NF: Устранение частичных зависимостей от первичного ключа
- 3NF: Устранение транзитивных зависимостей
- BCNF: Каждый определитель должен быть кандидатным ключом
- 4NF: Обработка многозначных зависимостей
- 5NF: Обработка зависимостей соединения