Базы данных

Моделирование баз данных

Типы моделей

  • Физическая модель
    • Как представлены данные
    • Императивное описание
  • Концептуальная модель
    • Какие данные
    • Декларативное описание
  • Преобразование моделей
  • Запись физической модели на SQL

Физическая модель

Содержание

Схема реляционной БД

  • Основные элементы
    • Таблицы
    • Ссылки между таблицами
  • Дополнительные элементы
    • Представления (views)
    • Хранимые процедуры
    • Триггеры

Таблицы

  • Таблица – набор записей
  • Запись (строка) – набор полей
  • Колонка (поле) – набор значений определенного типа

Ключи

  • Ключ – набор полей, идентифицирующих запись
    • Простой ключ – одно поле
    • Составной ключ – несколько полей
  • Какие ключи?

Пример составного ключа

  • Какой ключ?
    • (Series, PassportNo)

Типы ключей

  • «Естественность»
    • Естественные (natural)
    • Суррогатные (surrogate)
  • «Приоритет»
    • Основной (primary)
    • Дополнительные (secondary)

Ссылки

  • Ссылка – значения поля(ей) содержатся в ключе (другой) таблицы
    • Внешний ключ
    • Простая ссылка
    • Составная ссылка

Пример ссылки на себя

Графическая нотация

Содержание

Графическая нотация таблиц

Свойства колонок

Обозначение Свойство
«M» Обязательная
«O» Необязательная
«PK» Основной ключ
подчёркивание Основной ключ
«Kn» Дополнительный ключ n
  • Может ли пометка «PK» быть указана у нескольких колонок?
    • Да, в случае составного основного ключа
    • Аналогично «Kn»

Графическая нотация ссылок

Сущность

  • Имя
  • Атрибуты
    • Имя
    • Домен

Домен

  • Тип атрибута
    • Описывает, что хранится
    • Простой – атомарное значение
    • Составной – несколько значений
  • Примеры
    • name – имя сущности
    • address – адрес
      create type Address as (
          city      varchar(30),
          street  varchar(30),
          ...
      )
      

Свойства атрибутов

Обозначение Свойство
«M» Обязательная
«O» Необязательная
«PK» Основной ключ
«Kn» Дополнительный ключ n

Связь

  • Имя
  • Связываемые сущности и их роли
  • Тип связи

Зачем нужны роли

Типы связей

  • Типы концов
  • Примеры связей

Ассоциация

  • Обобщенная связь
    • Нагруженная
    • Многосторонняя

Пример ассоциации

Ассоциация или связь?

  • Ассоциации, связи и сущности взаимозаменяемы
    • У ассоциации нет identity
  • Правила
    • Простая и ненагруженная → связь
    • Можно ли идентифицировать → сущность
    • Иначе → ассоциация

Многосторонние ассоциации

  • Какое ограничение здесь выражено?
    • У каждого контракта есть поручитель
    • Можно быть поручителем у ровно одного контракта

Ограничения по Чену

  • Look-across, Chen-like
    • Зафиксировав остальные сущности, получим ограничение на рассматриваемую
    • У каждого контракта есть поручитель

Ограничения по Мерис

  • Look-here, Merise-like
    • Ограничение непосредственно на сущность
    • Можно быть поручителем у ровно одного контракта

Обобщённые ограничения

  • Generic
    • Фиксируем произвольное подмножество

Связи ограничений

  • Для связей
    • Чен = Мерис = Обобщённые
  • Для 3-ассоциаций
    • Чен Мерис = Обобщённые
  • Для 4+-ассоциаций
    • Чен Мерис Обобщённые

Слабая сущность

  • Слабая сущность – недостаточно атрибутов для идентификации
  • Идентифицирующая связь – получение дополнительных атрибутов

Нотация Питера Чена

  • Разработал модель Сущность-связь в 1976

UML-нотация

Object Definition Language

class Student {
    int Id;
    string FirstName, LastName;
    Group group inverse Group::students;
}
class Group {
    int Id;
    Set<Student> students inverse Student::group;
}

Постепенное преобразование

Содержание

Связи многие-ко-многим

  • Связи многие-ко-многим → в ассоциации
    • По Чену: типы концов сохраняются
    • По Мерис: типы концов меняются местами

Ассоциации

  • Ассоциации → сущности
    • Атрибуты → атрибуты
    • Концы → связи
      • К-одному → идентифицирующие связи
      • Ко-многим → простые связи

Сущности

  • Сущности → таблицы
    • Простые атрибуты → столбцы
    • Составные атрибуты → набор столбцов
    • Домены → типы
    • Ключи → ключи
    • Идентифицирующие связи → столбцы + ключи

Связи

  • Связи → дополнительные атрибуты
    • Многие-к-одному
      • дополнительные со стороны «много»
    • Один-к-одному
      • дополнительные со стороны «обязательного»

Порядок преобразования

  • Сущности
  • Слабые сущности
  • Отношения
  • Ассоциации

Сущности

  • Сущности → таблицы
    • Простые атрибуты → столбцы
    • Составные атрибуты → набор столбцов
    • Домены → типы
    • Ключи → ключи

Слабые сущности

  • Слабые сущности → таблицы
    • Идентифицирующие атрибуты → ключевые столбцы
    • Простые атрибуты → столбцы
    • Составные атрибуты → набор столбцов
    • Домены → типы

Связи один-к-одному

  • Обязательные
    • Дополнительные поля с обязательной стороны
      • Идентификатор другой стороны (ключ)
      • «Нагрузка»

Связи один-к-одному

  • Необязательные
    • Необязательные дополнительные поля
    • Дополнительная таблица
      • Идентификаторы сторон (ключи)
      • «Нагрузка»

Связи один-ко-многим

  • Обязательные со стороны «один»
    • Дополнительные поля со стороны «много»
      • Идентификатор другой стороны
      • «Нагрузка»

Связи один-ко-многим

  • Необязательные со стороны «один»
    • Необязательные дополнительные поля
    • Дополнительная таблица
      • Идентификатор стороны «один»
      • Идентификатор стороны «много» (основной ключ)
      • «Нагрузка»

Связи один-ко-многим

  • Обязательные со стороны «много»
    • + Обратная ссылка с составным ключом
      • Идентификаторы сторон

Связи многие-ко-многим

  • Общий случай
    • Дополнительная таблица
      • Идентификаторы (основной ключ)
      • «Нагрузка»

Связи многие-ко-многим

  • Обязательный
    • + Обратная ссылка с составным ключом
      • Идентификаторы сторон

Ассоциации

  • Дополнительная таблица
    • Столбцы — ключи всех связанных сущностей
    • «Нагрузка»
    • Ключ — обязательные связи

Data Definition Language

  • Часть SQL для описания данных
  • Операторы работы с таблицами
    • create table – создание
    • drop table – удаление
    • alter table – изменение
  • Операторы работы с типами
    • create type – создание
    • drop type – удаление
    • alter type – изменение

Оператор create table

  • Синтаксис
    • create table имя (описание) опция* ;
  • Пример
    create table Persons (
        id int,
        name varchar(50)
    );
    

Описание таблицы

  • Синтаксис
    • часть(, часть)*
  • Части
    • Описание столбца
    • Описание основного ключа
    • Описание дополнительных ключей
    • Описание ссылок

Описание столбца

  • Синтаксис
    • имя тип (null|not null)? (default значение)?
  • Примеры
    • id int not null
    • name varchar(10) not null
    • issue date null
    • issue date default current_date()
    • id autoincrement/serial – не стандартизовано
    • id generated [by default|always] as identity – стандартизовано

Типы данных (1)

  • Символьные
    • char – символ
    • char(n) – строка, дополняемая пробелами
    • varchar(n) – строка переменной длины
    • nchar(n), nvarchar(n) – многоязычные
  • Числа
    • bit, int – целые
    • float, double – с плавающей точкой
    • numeric(длина) – целое произвольной точности
    • decimal(длина, точность) – с фиксированной точкой

Типы данных (2)

  • Дата и время
    • date – дата
    • time [with time zone] – время внутри суток
    • timestamp [with time zone], datetime – дата и время
  • Данные заранее неизвестного размера
    • blob – двоичные
    • clob/text – символьные

Описание первичного ключа

  • Синтаксис
    • (constraint имя)?
      primary key (столбцы
      +)
  • Примеры
    • primary key (id)
      
    • primary key (passport_series, passport_no)
      
    • constraint person_pk primary key (id)
      

Описание ключа

  • Синтаксис
    • (constraint имя)?
      unique
      (primary key)?
      (столбцы
      +)
  • Примеры
    • unique (id)
      
    • unique primary key (passport_series, passport_no)
      
    • constraint person_uniq unique (id)
      

Описание внешнего ключа

  • Синтаксис
    • (constraint имя)?
      foreign key (столбцы
      +)
      references таблица (столбцы
      +)
  • Примеры
    • constraint student_group_fk foreign key (groupId)
      references groups(id)
      
    • foreign key (passport_series, passport_no)
      references passports(passport_series, passport_no)
      

Оператор drop table

  • Синтаксис
    • drop table имена+;
    • Большинство СУБД не позволяют удалять таблицы, на которые есть ссылки
  • Примеры
    • drop table persons;
      
    • drop table students, groups;
      

Оператор alter table

  • Синтаксис
    • alter table add column описание;
    • alter table add constraint описание;
    • alter table change описание столбца;
    • alter table drop column имя;
    • alter table drop constraint имя;
  • Примеры
    • alter table person add column birthday date;
      
    • alter table person change birthday timestamp not null;
      
    • alter table student drop constraint student_group_fk;
      

Оператор create/alter type

  • В стандарте
    • Конструкторы и методы
    • Наследование
    • Ограничения
    • Ссылки
    • Уникальность значений
  • Читайте документацию к вашей БД

Оператор drop type

  • Синтаксис
    • drop type имена+;
  • Примеры
    • drop type Address;
      

Литература

Содержание

Основная литература

  • Дейт К. Введение в системы баз данных (глава 14)
  • Уидом Д., Ульман Д. Основы реляционных баз данных (глава 2)
  • Gulutzan P., Pelzer T. SQL-99 complete, really

Дополнительная литература

  • Chen P. The Entity-Relationship Model: Toward a Unified View of Data
  • Chen P. Entity-Relationship Modeling: Historical Events, Future Trends, and Lessons Learned
  • Hartmann S. Reasoning about participation constraints and Chen's constraints

Документация по конкретным СУБД