Skip to content
IRC-CodingIRC-Coding
ER-модельEntity RelationshipКардинальностьСвязиМоделирование данныхБаза данных

ER-модели: Entity Relationship, связи и кардинальность

ER-модели визуализируют структуры баз данных. Entities, Relationships, кардинальность (1:1, 1:n, n:m), атрибуты и Chen-нотация с примерами.

S

schutzgeist

4 min read
ER-модели: Entity Relationship, связи и кардинальность

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-модели служат основой процесса нормализации

Основные компоненты

  1. Entity Type: множество однотипных сущностей с одинаковыми атрибутами
  2. Weak Entity: сущность без собственной уникальной идентификации, зависит от другой сущности
  3. Relationship Type: связь между двумя или более типами сущностей
  4. Attribute: свойство сущности или связи
  5. Primary Key: уникальный идентификатор сущности
  6. Foreign Key: ссылка на Primary Key другой сущности
  7. Cardinality: максимальное и минимальное количество экземпляров связи
  8. 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. В чём отличие между связями 1:n и n:m? 1:n: одна запись слева может быть связана со многими записями справа. n:m: много записей слева связаны со многими записями справа (требует таблицы связей).

  2. Когда нужна таблица связей? Для связей n:m, так как базы данных не поддерживают прямые связи n:m.

  3. Что такое слабые сущности? Сущности без собственного первичного ключа, которые зависят от других сущностей.

  4. Объясните Chen notation! Прямоугольники для сущностей, ромбы для связей, овалы для атрибутов.

Основные источники

  1. https://de.wikipedia.org/wiki/Entity-Relationship-Modell
  2. https://www.gatech.edu/coe/cse/er-diagrams
  3. https://www.lucidchart.com/pages/er-diagrams

Рекомендуемая литература: Базы данных

Keine Bücher für Kategorie "datenbanken" gefunden.

Назад к блогу
Share:

Похожие статьи