ER-модели: Entity Relationship, связи и кардинальность
Этот материал рассматривает Entity-Relationship-модели с описанием связей, кардинальностей и практическими примерами.
Суть в одном абзаце
ER-модели — это графические схемы для визуализации структуры баз данных. Они показывают entities (сущности), relationships (связи) и их кардинальность.
Краткое определение
Entity-Relationship-моделирование применяется для концептуального проектирования баз данных. Это позволяет визуализировать структуру данных до того, как начнётся техническая реализация.
Основные компоненты:
- Entities: объекты реального мира (клиент, товар, заказ)
- Relationships: связи между сущностями (клиенты → размещают → заказы)
- Attributes: свойства сущностей (имя, цена, дата)
- Кардинальность: количество связей (1:1, 1:n, n:m)
Нотации:
- Chen notation: прямоугольники для сущностей, ромбы для связей
- Crow’s Foot: современная нотация с символами для обозначения кардинальности
- UML-диаграммы классов: расширенное представление с методами
ER-модели служат средством коммуникации между разработчиками, администраторами БД и специалистами предметной области. Они составляют основу для логического моделирования и последующей нормализации.
Ключевые моменты
- Entities: реальные объекты с уникальной идентификацией
- Relationships: связи между сущностями с указанием кардинальности
- Кардинальность: 1:1, 1:n, n:m определяют количество связей
- Attribute: свойства сущностей (простые, составные, производные)
- Chen notation: классическая нотация ER с прямоугольниками и ромбами
- Crow’s Foot: современная нотация с наглядным обозначением кардинальности
- Практическое применение: важно для проектирования и моделирования БД
- Нормализация: ER-модели служат основой процесса нормализации
Основные компоненты
- Entity Type: множество однотипных сущностей с одинаковыми атрибутами
- Weak Entity: сущность без собственной уникальной идентификации, зависит от другой сущности
- Relationship Type: связь между двумя или более типами сущностей
- Attribute: свойство сущности или связи
- Primary Key: уникальный идентификатор сущности
- Foreign Key: ссылка на Primary Key другой сущности
- Cardinality: максимальное и минимальное количество экземпляров связи
- Participation: обязательно ли сущность участвует в связи (total/partial)
Практические примеры
Связь 1:1
-- Каждый сотрудник имеет ровно одно рабочее место
CREATE TABLE Mitarbeiter (
mitarbeiter_id INT PRIMARY KEY,
name VARCHAR(100),
geburtsdatum DATE
);
CREATE TABLE Arbeitsplatz (
arbeitsplatz_id INT PRIMARY KEY,
gebaeude VARCHAR(50),
etage INT,
raum INT,
mitarbeiter_id INT UNIQUE, -- 1:1 связь
FOREIGN KEY (mitarbeiter_id) REFERENCES Mitarbeiter(mitarbeiter_id)
);
Связь 1:n
-- Один клиент может разместить много заказов
CREATE TABLE Kunden (
kunden_id INT PRIMARY KEY,
name VARCHAR(100),
adresse VARCHAR(200)
);
CREATE TABLE Bestellungen (
bestell_id INT PRIMARY KEY,
bestelldatum DATE,
gesamtbetrag DECIMAL(10,2),
kunden_id INT, -- 1:n связь
FOREIGN KEY (kunden_id) REFERENCES Kunden(kunden_id)
);
Связь n:m (с таблицей связей)
-- Студенты могут записываться на много курсов, а один курс может иметь много студентов
CREATE TABLE Studenten (
student_id INT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100)
);
CREATE TABLE Kurse (
kurs_id INT PRIMARY KEY,
kursname VARCHAR(100),
credits INT
);
-- Таблица связей для n:m отношения
CREATE TABLE StudentenKurse (
student_id INT,
kurs_id INT,
belegdatum DATE,
note DECIMAL(3,1),
PRIMARY KEY (student_id, kurs_id),
FOREIGN KEY (student_id) REFERENCES Studenten(student_id),
FOREIGN KEY (kurs_id) REFERENCES Kurse(kurs_id)
);
Сложная ER-модель (пример библиотеки)
-- Сущности с различными типами связей
CREATE TABLE Autoren (
autor_id INT PRIMARY KEY,
name VARCHAR(100),
geburtsjahr INT
);
CREATE TABLE Buecher (
buch_id INT PRIMARY KEY,
titel VARCHAR(200),
isbn VARCHAR(20) UNIQUE,
erschienenjahr INT
);
CREATE TABLE Verlage (
verlag_id INT PRIMARY KEY,
name VARCHAR(100),
sitz VARCHAR(100)
);
CREATE TABLE Kunden (
kunden_id INT PRIMARY KEY,
name VARCHAR(100),
mitgliedsdatum DATE
);
-- Связи
-- n:m: Авторы пишут книги
CREATE TABLE BuchAutoren (
buch_id INT,
autor_id INT,
PRIMARY KEY (buch_id, autor_id),
FOREIGN KEY (buch_id) REFERENCES Buecher(buch_id),
FOREIGN KEY (autor_id) REFERENCES Autoren(autor_id)
);
-- n:1: Книги издаются издательствами
ALTER TABLE Buecher ADD verlag_id INT;
ALTER TABLE Buecher ADD FOREIGN KEY (verlag_id) REFERENCES Verlage(verlag_id);
-- 1:n: Клиенты берут книги в библиотеке
CREATE TABLE Ausleihen (
ausleih_id INT PRIMARY KEY,
kunden_id INT,
buch_id INT,
ausleihdatum DATE,
rueckgabedatum DATE,
FOREIGN KEY (kunden_id) REFERENCES Kunden(kunden_id),
FOREIGN KEY (buch_id) REFERENCES Buecher(buch_id)
);
Сравнение ER-нотаций
Chen notation
[ KUNDE ] ---< bestellt >--- [ PRODUKT ]
| |
|1 |n
| |
[ADRESSE] [KATEGORIE]
Crow’s Foot notation
KUNDE ||--o{ BESTELLPOSITION } ||--| PRODUKT
| |
| |
ADRESSE KATEGORIE
Символы кардинальности
|: ровно одинO: ноль или один}: ноль или более|{: один или более
Типы атрибутов
Простые атрибуты
name VARCHAR(100) -- простой
preis DECIMAL(10,2) -- простой
datum DATE -- простой
Составные атрибуты
-- Адрес как составной атрибут
strasse VARCHAR(100),
hausnummer VARCHAR(10),
plz VARCHAR(5),
ort VARCHAR(100)
Производные атрибуты
-- Вычисляемые значения
alter INT AS (YEAR(CURRENT_DATE) - YEAR(geburtsdatum)),
gesamtpreis DECIMAL(10,2) AS (menge * einzelpreis)
Многозначные атрибуты
-- Несколько значений для одной сущности
CREATE TABLE Telefonnummern (
kunden_id INT,
telefonnummer VARCHAR(20),
PRIMARY KEY (kunden_id, telefonnummer),
FOREIGN KEY (kunden_id) REFERENCES Kunden(kunden_id)
);
Преимущества и недостатки
Преимущества ER-моделей
- Визуализация: интуитивное представление сложных структур данных
- Коммуникация: единый язык для специалистов и разработчиков
- Документация: хорошее описание структуры базы данных
- Планирование: основа для реализации базы данных
- Качество: ранее обнаружение ошибок проектирования
Недостатки
- Сложность: при больших системах становится трудно читать
- Абстракция: детали реализации не видны
- Обслуживание: изменения требуют доработки модели
- Кривая обучения: нужно понимать различные нотации
Типичные вопросы
-
В чём отличие между связями 1:n и n:m? 1:n: одна запись слева может быть связана со многими записями справа. n:m: много записей слева связаны со многими записями справа (требует таблицы связей).
-
Когда нужна таблица связей? Для связей n:m, так как базы данных не поддерживают прямые связи n:m.
-
Что такое слабые сущности? Сущности без собственного первичного ключа, которые зависят от других сущностей.
-
Объясните Chen notation! Прямоугольники для сущностей, ромбы для связей, овалы для атрибутов.
Основные источники
- https://de.wikipedia.org/wiki/Entity-Relationship-Modell
- https://www.gatech.edu/coe/cse/er-diagrams
- https://www.lucidchart.com/pages/er-diagrams
Рекомендуемая литература: Базы данных
Keine Bücher für Kategorie "datenbanken" gefunden.



