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

Приведи пример видов взаимосвязей между сущностями

1.8 Middle🔥 141 комментариев
#Требования и их анализ

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

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

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

Виды взаимосвязей между сущностями

Взаимосвязи (relationships) между сущностями — это один из ключевых концептов в проектировании баз данных и моделировании систем. Разберёмся с основными типами.

Основные типы связей (Cardinality)

1. Один к одному (1:1)

Одна запись первой сущности связана ровно с одной записью второй сущности.

Пример: Паспорт и Человек

Паспорт (1) ←→ (1) Человек
- У каждого человека один паспорт
- У каждого паспорта один владелец

Таблица Люди:
| id | name | passport_id |
| 1  | Иван | 100 |

Таблица Паспорта:
| id | serial | person_id |
| 100 | AB123456 | 1 |

Другие примеры 1:1:

  • Сотрудник ↔ Рабочее место
  • Водитель ↔ Водительское удостоверение
  • Страна ↔ Столица

2. Один ко многим (1:N)

Одна запись первой сущности связана с несколькими записями второй сущности.

Пример: Автор и Книги

Автор (1) ←→ (N) Книги
- У автора может быть много книг
- У каждой книги один автор

Таблица Авторы:
| id | name |
| 1  | Толстой |
| 2  | Пушкин |

Таблица Книги:
| id | title | author_id |
| 1  | Война и мир | 1 |
| 2  | Преступление и наказание | 1 |
| 3  | Евгений Онегин | 2 |

Другие примеры 1:N:

  • Отдел ↔ Сотрудники (у отдела много сотрудников)
  • Компания ↔ Проекты
  • Категория товара ↔ Товары
  • Родитель ↔ Дети

3. Многие ко многим (M:N)

Одна запись первой сущности может быть связана со многими записями второй, и наоборот.

Пример: Студенты и Курсы

Студенты (M) ←→ (N) Курсы
- Студент может учиться на нескольких курсах
- На курсе учится несколько студентов

Таблица Студенты:
| id | name |
| 1  | Петр |
| 2  | Мария |

Таблица Курсы:
| id | title |
| 100 | Математика |
| 200 | Физика |

Таблица Enrollment (связующая):
| student_id | course_id |
| 1 | 100 |
| 1 | 200 |
| 2 | 100 |

Другие примеры M:N:

  • Пользователи ↔ Роли (пользователь имеет несколько ролей, роль у нескольких пользователей)
  • Книги ↔ Авторы (книга может быть написана несколькими авторами)
  • Заказы ↔ Товары (заказ содержит несколько товаров, товар в нескольких заказах)
  • Фильмы ↔ Актёры

Дополнительные характеристики связей

Обязательность (Optionality)

Обязательная связь (1..1)

Паспорт ---- Человек
  (1,1)        (1,1)
- Каждый паспорт должен иметь владельца
- Каждый человек должен иметь паспорт (в идеале)

Опциональная связь (0..1)

Машина ---- Человек
  (1,1)       (0,1)
- Каждая машина имеет хозяина
- Человек может не иметь машину

Опциональная со стороны "многих" (0..N)

Департамент ---- Сотрудник
   (1,1)          (1..N)
- Сотрудник обязательно в одном департаменте
- Департамент может быть без сотрудников (пустой)

Типы связей по поведению

1. Идентифицирующая связь (Identifying Relationship)

Первичный ключ зависимой сущности включает первичный ключ главной сущности.

Пример: Заказ и Строки заказа

Заказ (1) ←── (N) Строка заказа
  id               (order_id, line_number) - составной PK
  number
  date

- Строка заказа не может существовать без заказа
- Строка заказа идентифицируется в контексте заказа
- При удалении заказа удаляются все его строки

2. Неидентифицирующая связь (Non-Identifying Relationship)

Внешний ключ зависимой сущности, но имеет отдельный первичный ключ.

Пример: Автор и Книги

Автор (1) ←── (N) Книги
  id              id (свой PK!)
  name            title
                  author_id (FK)

- Книга может существовать независимо (может быть удалена автором)
- Книга имеет свой идентификатор

Типы связей в ER-диаграммах (Entity-Relationship)

Нотация Chen:

Автор ────────── Написал ────────── Книга
                  (связь)

Нотация Crow's Foot (врачьи ноги):

Автор |──────────<  Книги
      1          N
  
  | — одна запись
  < — много записей

Нотация UML:

Автор ─────────→ Книга
  1             0..*
  
  (читается: один автор имеет нуль или более книг)

Примеры в реальных системах

E-commerce система

Клиент (1) ←─ (N) Заказы (1) ←─ (N) Товары
           ↓
      (M) Отзывы (N) ←─ Товары

- Клиент имеет много заказов (1:N)
- Заказ содержит много товаров (M:N через OrderItem)
- Товары имеют много отзывов (1:N)
- Товары могут быть в разных категориях (M:N)

Школьная система

Школа (1) ←─ (N) Классы (1) ←─ (N) Учащиеся
         ↓
    (N) Учителя (M) ←─ Предметы
         ↓
    (M) Классы

- Школа имеет много классов (1:N)
- Класс имеет много учащихся (1:N)
- Учитель может преподавать разные предметы (M:N)
- Учитель может преподавать в разных классах (M:N)

Социальная сеть

Пользователь (M) ←─ (N) Дружба
Пользователь (M) ←─ (N) Подписка
Пользователь (1) ←─ (N) Посты
          ↓
        (1) ─← (N) Комментарии
          ↓
        (M) ←─ (N) Лайки

SQL примеры

1:1 связь (паспорт и человек)

CREATE TABLE people (
  id INT PRIMARY KEY,
  name VARCHAR(100)
);

CREATE TABLE passports (
  id INT PRIMARY KEY,
  serial VARCHAR(20),
  person_id INT UNIQUE NOT NULL,  -- UNIQUE для 1:1
  FOREIGN KEY (person_id) REFERENCES people(id)
);

1:N связь (автор и книги)

CREATE TABLE authors (
  id INT PRIMARY KEY,
  name VARCHAR(100)
);

CREATE TABLE books (
  id INT PRIMARY KEY,
  title VARCHAR(100),
  author_id INT NOT NULL,
  FOREIGN KEY (author_id) REFERENCES authors(id)
);

M:N связь (студенты и курсы)

CREATE TABLE students (
  id INT PRIMARY KEY,
  name VARCHAR(100)
);

CREATE TABLE courses (
  id INT PRIMARY KEY,
  title VARCHAR(100)
);

CREATE TABLE enrollments (
  student_id INT NOT NULL,
  course_id INT NOT NULL,
  PRIMARY KEY (student_id, course_id),
  FOREIGN KEY (student_id) REFERENCES students(id),
  FOREIGN KEY (course_id) REFERENCES courses(id)
);

Каскадные операции (Cascade Rules)

-- Удаление автора удалит все его книги
FOREIGN KEY (author_id) REFERENCES authors(id) 
ON DELETE CASCADE
ON UPDATE CASCADE

-- Удаление автора установит NULL для книг (если разрешено)
ON DELETE SET NULL

-- Удаление запретит (по умолчанию)
ON DELETE RESTRICT

Итог

Основные типы связей между сущностями:

1. Один к одному (1:1) — паспорт и человек, один водитель и одна машина 2. Один ко многим (1:N) — автор и книги, отдел и сотрудники 3. Многие ко многим (M:N) — студенты и курсы, пользователи и роли

Каждая связь может быть обязательной или опциональной, идентифицирующей или неидентифицирующей. Правильное моделирование связей — основа хорошей архитектуры базы данных.

Приведи пример видов взаимосвязей между сущностями | PrepBro