Базы данных: cвязи, ключи в реляционных моделях данных | Вопросы для собеседования | Skilio
Базы данных: cвязи, ключи в реляционных моделях данных
Вопрос:

Что такое "отношение" (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: Обработка зависимостей соединения
0
SQL Средний Опубликовано
© Skilio, 2025
Условия использования
Политика конфиденциальности
Мы используем файлы cookie, для персонализации сервисов и повышения удобства пользования сайтом. Если вы не согласны на их использование, поменяйте настройки браузера.