← Назад к вопросам

Как называются атрибуты выстраивания связи в таблицах?

1.6 Junior🔥 151 комментариев
#Базы данных и SQL

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI28 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Атрибуты связей в таблицах базы данных

Для установления связей между таблицами в реляционных БД используются специальные атрибуты (столбцы) со строгой типизацией и назначением.

Основные типы ключей

Primary Key (Первичный ключ):

  • Уникально идентифицирует каждую строку в таблице
  • Не может быть NULL
  • В таблице только один Primary Key
  • Может быть простой (один столбец) или составной (несколько столбцов)
  • Пример: id INT PRIMARY KEY AUTO_INCREMENT
  • Служит основой для создания связей с другими таблицами

Foreign Key (Внешний ключ):

  • Ссылается на Primary Key другой таблицы
  • Устанавливает связь один-ко-многим (one-to-many)
  • Может быть NULL (опциональная связь)
  • В таблице может быть несколько Foreign Keys
  • Пример: user_id INT FOREIGN KEY REFERENCES users(id)
  • Обеспечивает целостность данных (referential integrity)

Candidate Key (Ключ-кандидат):

  • Столбец или комбинация столбцов, которые могут служить Primary Key
  • Обладает свойством уникальности и минимальности
  • Из всех кандидатов выбирается один Primary Key
  • Остальные могут быть помечены как UNIQUE

Super Key (Супер-ключ):

  • Набор атрибутов, который уникально идентифицирует строку
  • Может содержать дополнительные атрибуты (не минимален)
  • Не очень полезен в практике, но важен в теории

Типы связей

One-to-One (Один-к-одному):

-- Таблица Users
CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(100)
);

-- Таблица Profiles
CREATE TABLE profiles (
    id INT PRIMARY KEY,
    user_id INT UNIQUE,
    FOREIGN KEY (user_id) REFERENCES users(id)
);
  • Одной записи в первой таблице соответствует одна запись во второй
  • Foreign Key с UNIQUE ограничением

One-to-Many (Один-ко-многим):

-- Таблица Authors
CREATE TABLE authors (
    id INT PRIMARY KEY,
    name VARCHAR(100)
);

-- Таблица Books
CREATE TABLE books (
    id INT PRIMARY KEY,
    author_id INT,
    title VARCHAR(200),
    FOREIGN KEY (author_id) REFERENCES authors(id)
);
  • Одному автору может соответствовать много книг
  • Это самый распространённый тип связи

Many-to-Many (Много-ко-многим):

-- Таблица Students
CREATE TABLE students (
    id INT PRIMARY KEY
);

-- Таблица Courses
CREATE TABLE courses (
    id INT PRIMARY KEY
);

-- Таблица студентов на курсах (junction table)
CREATE TABLE student_courses (
    student_id INT,
    course_id INT,
    PRIMARY KEY (student_id, course_id),
    FOREIGN KEY (student_id) REFERENCES students(id),
    FOREIGN KEY (course_id) REFERENCES courses(id)
);
  • Студент может быть на нескольких курсах, курс может иметь множество студентов
  • Требует промежуточную таблицу (junction table)

Дополнительные атрибуты и ограничения

UNIQUE (Уникальность):

  • Обеспечивает уникальность значений в столбце
  • Может быть несколько UNIQUE ограничений
  • В отличие от PRIMARY KEY, может содержать NULL
  • Пример: email VARCHAR(100) UNIQUE

NOT NULL (Обязательность):

  • Столбец не может содержать NULL значения
  • Обычно используется для Primary Key и важных Foreign Key
  • Пример: user_id INT NOT NULL FOREIGN KEY REFERENCES users(id)

DEFAULT (Значение по умолчанию):

  • Если значение не указано, используется default
  • Пример: status VARCHAR(20) DEFAULT active
  • Может быть выражение: created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP

CHECK (Проверка значения):

  • Ограничивает диапазон допустимых значений
  • Пример: age INT CHECK (age >= 0 AND age <= 150)

CASCADE (Каскадное удаление/обновление):

FOREIGN KEY (user_id) REFERENCES users(id)
    ON DELETE CASCADE
    ON UPDATE CASCADE
  • При удалении записи в родительской таблице удаляются связанные записи
  • При обновлении Primary Key обновляются все Foreign Keys

Примеры полных определений

Таблица с правильно настроенными ключами:

CREATE TABLE orders (
    id INT PRIMARY KEY AUTO_INCREMENT,
    user_id INT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    status VARCHAR(20) DEFAULT pending CHECK (status IN (pending, completed, cancelled)),
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);

Составной Primary Key:

CREATE TABLE order_items (
    order_id INT,
    product_id INT,
    quantity INT,
    PRIMARY KEY (order_id, product_id),
    FOREIGN KEY (order_id) REFERENCES orders(id),
    FOREIGN KEY (product_id) REFERENCES products(id)
);

Нормализация и ключи

Первая нормальная форма (1NF):

  • Таблица имеет Primary Key
  • Все значения атомарны (неделимы)

Вторая нормальная форма (2NF):

  • Соответствует 1NF
  • Все неключевые атрибуты зависят от всего Primary Key
  • Исключены частичные зависимости

Третья нормальная форма (3NF):

  • Соответствует 2NF
  • Нет транзитивных зависимостей неключевых атрибутов

Best Practices

  • Всегда определяй Primary Key в каждой таблице
  • Используй surrogate keys (auto-increment ID) вместо естественных ключей когда возможно
  • Создавай индексы на Foreign Keys для производительности
  • Проверяй целостность данных через constraints
  • Документируй все связи между таблицами
  • Избегай циклических зависимостей

Правильное использование этих атрибутов обеспечивает целостность данных, оптимизирует запросы и облегчает поддержку БД.

Как называются атрибуты выстраивания связи в таблицах? | PrepBro