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

Какие есть уровни абстракции модели данных?

2.3 Middle🔥 241 комментариев
#Базы данных и SQL#Нотации и диаграммы

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

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

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

Уровни абстракции модели данных

Данные в любой информационной системе представлены на трех уровнях абстракции, определенных ANSI/SPARC архитектурой. Эти уровни позволяют скрывать сложность и обеспечивают независимость между различными представлениями данных.

Уровень 1: Внешний уровень (External/View Level)

Определение: это представление данных, видимое конечному пользователю или приложению

Характеристики:

  • Описывает только интересующую пользователя часть БД
  • Может включать вычисляемые поля
  • Скрывает детали реализации и чувствительные данные
  • Разные пользователи видят разные представления одних же данных

Примеры:

Внешний уровень для менеджера продаж:
Эмployee (employee_id, name, email, sales_total)

Внешний уровень для бухгалтера:
Employee (employee_id, name, salary, tax_info)

Внешний уровень для клиента:
Public_Profile (user_id, username, bio, avatar)

Реализация в SQL:

-- Представление для менеджера
CREATE VIEW sales_view AS
SELECT e.employee_id, e.name, e.email, COUNT(o.order_id) as sales_total
FROM employees e
LEFT JOIN orders o ON e.employee_id = o.sales_person_id
GROUP BY e.employee_id;

-- Представление для клиента (скрыты зарплата и внутренние данные)
CREATE VIEW public_profile AS
SELECT user_id, username, bio, avatar_url
FROM users
WHERE is_public = true;

Преимущества:

  • Каждый пользователь видит только нужные ему данные
  • Логический уровень абстракции
  • Безопасность: скрываются чувствительные данные
  • Маскирует изменения в БД от приложений

Уровень 2: Концептуальный уровень (Conceptual/Logical Level)

Определение: логическое описание всех данных в БД и связей между ними, независимое от способа физического хранения

Характеристики:

  • Полное описание структуры всей БД
  • Определяет все таблицы, связи, ограничения
  • Не зависит от конкретной СУБД (MySQL, PostgreSQL, Oracle)
  • Не зависит от физического расположения данных на диске
  • Определяется с помощью Entity-Relationship (ER) диаграмм или UML

Пример ER-диаграммы (концептуальный уровень):

Клиент (1) ─── (n) Заказ (1) ─── (n) Товар
  |id         |order_id       |product_id
  |name       |client_id      |name
  |email      |date           |price
  |          |status          |

Реализация в SQL (логическая схема):

-- Эта схема описывает ВСЮ БД независимо от физического хранения
CREATE TABLE clients (
    id UUID PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    email VARCHAR(255) UNIQUE,
    phone VARCHAR(20),
    CONSTRAINT valid_email CHECK (email LIKE '%@%')
);

CREATE TABLE orders (
    id UUID PRIMARY KEY,
    client_id UUID NOT NULL REFERENCES clients(id),
    order_date TIMESTAMP NOT NULL,
    status VARCHAR(50) CHECK (status IN ('pending', 'completed', 'cancelled')),
    FOREIGN KEY (client_id) REFERENCES clients(id)
);

CREATE TABLE products (
    id UUID PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    price DECIMAL(10, 2),
    stock_quantity INT CHECK (stock_quantity >= 0)
);

CREATE TABLE order_items (
    id UUID PRIMARY KEY,
    order_id UUID NOT NULL REFERENCES orders(id),
    product_id UUID NOT NULL REFERENCES products(id),
    quantity INT NOT NULL CHECK (quantity > 0),
    unit_price DECIMAL(10, 2),
    FOREIGN KEY (order_id) REFERENCES orders(id),
    FOREIGN KEY (product_id) REFERENCES products(id)
);

Что описывает концептуальный уровень:

  • Сущности (таблицы): clients, orders, products
  • Атрибуты: id, name, email, price
  • Связи: один клиент имеет много заказов
  • Ограничения: email уникален, статус только из списка
  • Целостность: внешние ключи между таблицами

Преимущества:

  • Независимость от физической реализации
  • Понятно аналитикам, архитекторам, разработчикам
  • Легко переносить между разными СУБД
  • Фокус на логике, а не на деталях хранения

Уровень 3: Физический уровень (Physical/Internal Level)

Определение: описание того, КАК данные физически хранятся на диске

Характеристики:

  • Как именно хранятся данные в памяти
  • Какие индексы создаются
  • Как организованы файлы и блоки на диске
  • Какие алгоритмы доступа используются
  • Параметры оптимизации
  • Зависит от конкретной СУБД

Примеры физического уровня:

-- Индексы (физический уровень)
CREATE INDEX idx_clients_email ON clients(email) USING BTREE;
CREATE INDEX idx_orders_client_id ON orders(client_id);
CREATE INDEX idx_orders_status_date ON orders(status, order_date);

-- Параметры хранения
ALTER TABLE orders ENGINE=InnoDB ROW_FORMAT=COMPRESSED;

-- Партиционирование (в больших БД)
PARTITION BY RANGE (YEAR(order_date)) (
    PARTITION p2023 VALUES LESS THAN (2024),
    PARTITION p2024 VALUES LESS THAN (2025),
    PARTITION p2025 VALUES LESS THAN (2026)
);

Физический уровень включает:

  • Индексы: для быстрого поиска
  • Сжатие: для экономии места
  • Партиционирование: для больших таблиц
  • Кеширование: какие данные хранить в памяти
  • Блокировки: уровень блокировки строк или таблиц
  • Формат хранения: строки, столбцы, другие форматы

Пример: MySQL показывает физический уровень

-- Просмотр физических параметров таблицы
SHOW TABLE STATUS WHERE Name = 'orders';

-- Результат показывает:
Engine: InnoDB
Row_format: Dynamic
Data_length: 10485760  -- сколько байт занимает таблица
Index_length: 5242880 -- сколько занимают индексы

Преимущества изоляции физического уровня:

  • Оптимизация без изменения логики приложения
  • Можно добавить индекс без перезагрузки сервера
  • Можно изменить алгоритм доступа
  • Независимость логики от деталей реализации

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

Внешний уровень → VIEW (представления) ↓ (сопоставление) Концептуальный уровень → CREATE TABLE (логические схемы) ↓ (сопоставление) Физический уровень → ИНДЕКСЫ, ПАРТ, ФАЙЛЫ (на диске)

Пример запроса через все уровни:

Клиент (внешний уровень):
"Дай мне все заказы активных клиентов со статусом pending"
↓
Приложение выполняет:
SELECT * FROM sales_view WHERE order_status = 'pending'
↓
ВНЕШНИЙ УРОВЕНЬ преобразует в:
СЕЛЕКТ ИЗ таблиц: clients, orders, products
ГДЕ: is_active = true AND status = 'pending'
↓
КОНЦЕПТУАЛЬНЫЙ УРОВЕНЬ преобразует в:
полный SQL запрос с INNER JOIN и WHERE
↓
ФИЗИЧЕСКИЙ УРОВЕНЬ:
Использует индекс idx_orders_status для быстрого поиска
Читает блоки данных со стороны, где находятся pending заказы
Загружает данные в буфер
↓
РЕЗУЛЬТАТ: 0.05 секунд вместо 5 секунд

Независимость данных

Логическая независимость: Изменения в концептуальном уровне (добавление новой таблицы) не влияют на внешний уровень (представления остаются те же)

Физическая независимость: Изменения в физическом уровне (добавление индекса) не влияют на логику приложения

Практическое применение

Внешний уровень: разработчик использует VIEW

# Приложение работает с представлением
result = db.query("SELECT * FROM sales_view WHERE sales_total > 100")

Концептуальный уровень: аналитик проектирует схему

Диаграмма ER показывает все сущности и связи
База имеет 20 таблиц, 50+ связей

Физический уровень: DBA оптимизирует

DBA видит: "эта таблица растет быстро, нужно партиционирование"
DBA добавляет индекс на часто используемое поле
Производительность улучшается в 10 раз
Приложение не заметило изменений

Вывод

Три уровня абстракции позволяют разделить ответственность:

  • Внешний: что видит пользователь
  • Концептуальный: логическая структура
  • Физический: как это реально хранится

Эта изоляция критична для:

  • Безопасности (скрытие данных)
  • Маинтенейнса (изменение реализации без влияния на приложения)
  • Оптимизации (улучшение физического уровня без изменения кода)
  • Переносимости (переход между СУБД)

Каждый уровень решает свою задачу и не зависит от нижних уровней.

Какие есть уровни абстракции модели данных? | PrepBro