Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Cерьезные отношения: паттерны проектирования ре...

CUSTIS
October 30, 2014

Cерьезные отношения: паттерны проектирования реляционных СУБД

Открытый семинар для студентов в компании CUSTIS (30 октября 2014 года).
Лектор: Максим Зинченко, ведущий разработчик Java/Oracle.

CUSTIS

October 30, 2014
Tweet

More Decks by CUSTIS

Other Decks in Programming

Transcript

  1. Кто я? Что я здесь делаю?  Окончил МИФИ 

    В IT работаю 13 лет  Программирую – 20 лет  Работаю в CUSTIS 5 лет  Oracle => Java 2/69
  2. План  Вводная  Паттерны?  Парадигмы  Паттерны для

    СУБД: что это?  Отношения объектов  Отношения классов  Перекус  Практика Скучная часть Веселье 3/69
  3. Паттерны?  Что такое шаблоны проектирования?  Стандартные решения типовых

    задач  Зачем нужны?  Передача опыта  Упрощение коммуникаций 5/69
  4. Парадигмы программирования  Стандартный язык для СУБД – SQL 

    SQL состоит из двух основных частей  Описание структур (DDL)  Описание запросов (DML)  Обе части декларативные 9/69
  5. План  Вводная  Паттерны?  Парадигмы  Паттерны для

    СУБД: что это?  Отношения объектов  Отношения классов  Перекус  Практика Мы здесь 13/69
  6. Паттерны проектирования  В основном проработаны для императивных языков (особенно

    ООП)  Нам не интересны поведенческие, только структурные  Почти все они есть в UML  Такие паттерны можно реализовать и в декларативной части 14/69
  7. Паттерны проектирования  Из модели должна следовать реализация во всех

    частях программы  Будем считать паттернами СУБД адаптацию структурных паттернов, используемых в модели, к реляционной структуре 15/69
  8. Паттерны отношений объектов  Вводная  Паттерны?  Парадигмы 

    Паттерны для СУБД: что это?  Отношения объектов  Отношения классов  Перекус  Практика Мы здесь 16/69
  9. Один ко многим (1:N)  Классический вариант – FOREIGN KEY

     Мягкая ссылка  Часто делается отключенный FK 23/69
  10. Агрегация  «Слегка неравные» отношения  Всё также как с

    ассоциацией, но:  дополняем FK on delete set null  аналогично для мягких ссылок правим код 28/69
  11. Композиция  «Сильно неравные» отношения  Всё также как с

    ассоциацией, но  дополняем FK on delete cascade  аналогично для мягких ссылок правим код 29/69
  12. Последовательность  Сводим к 1:N и уникальности  Упорядочиваем по

    полю  Упорядочиваем по полю в контексте 35/69
  13. Иерархия  Что такое иерархия объектов?  Глава 1 

    Глава 1.1  Глава 1.2  Глава 1.2.1  Глава 1.3  Глава 2 …  По сути это 1:N 36/69
  14. Иерархия  Особый способ реализации  Путь к файлу C:\Windows\System32\cmd.exe

     Нумерация разделов в оглавлении Глава 1.7.4 39/69
  15. Иерархия  Иногда используется для ассоциаций  Это не совсем

    целевое назначение, но иногда допустимо  Все паттерны для одного класса ограниченно применимы для разных классов 41/69
  16. Граф  Что такое граф?  Ориентированный  Реализуем N:M

    между узлами  Не ориентированный  Храним как ориентированный с правилом упорядочивания  Храним по два ребра 45/69
  17. Циклы  Циклы могут быть во всех перечисленных отношениях 

    Проверка Проверка циклов не тривиальна Нельзя наложить простое условие на отсутствие циклов (только триггер) 47/69
  18. Синглтон (Одиночка, Singleton)  Что такое синглтон?  Что такое

    хранимый синглтон?  Необязательный (0–1)  Запрет создания новых  Права, триггеры, ограничения уникальности…  Обязательный (1–1)  Запрет удаления  Права, триггеры, … 48/69
  19. Перечисление (enumeration)  Что такое перечисление?  Строго заданный набор

    объектов  Можно не хранить в СУБД  Строковое поле с идентификатором и ограничением CHECK  Можно хранить как обычную сущность  Удобство ссылки на строковый код 49/69
  20. Паттерны отношений классов  Вводная  Паттерны?  Парадигмы 

    Паттерны для СУБД: что это?  Отношения объектов  Отношения классов  Перекус  Практика Мы здесь 50/69
  21. Отношения классов  Отношения между классами, а не экземплярами 

    Отношения между объектами метаинформации 51/69
  22. Наследование (обобщение)  А нужно ли на уровне хранения учитывать

    наследование?  Будут ли в отношениях объектов участвовать предки?  Нет = можно не рассматривать классы как связанные  Да = придется рассматривать 56/69
  23. Наследование (обобщение)  Одна таблица и дискриминатор Humans id type

    sex birthday name degree 1 PROFESSOR M 02/03/76 Иванов И. П. CANDIDATE 2 STUDENT M 01/07/94 Петров С. И. 3 PROFESSOR F 05/12/63 Сидорова А. Е. DOCTOR 4 STUDENT F 17/10/95 Неизвестная А. М. 5 STUDENT M 04/02/95 Криворуков П. Р. 57/69
  24. Наследование (обобщение)  Одна таблица и дискриминатор  Разбиение на

    таблицы id type sex birthday name 1 PROFESSOR M 02/03/76 Иванов И.П. 2 STUDENT M 01/07/94 Петров С.И. 3 PROFESSOR F 05/12/63 Сидорова А.Е. 4 STUDENT F 17/10/95 Неизвестная А.М. 5 STUDENT M 04/02/95 Криворуков П.Р. Humans Students Professors id 2 4 5 id degree 1 CANDIDATE 3 DOCTOR 58/69
  25. Рефлексия  В стандарте нет  Практически во всех СУБД

    доступна  Есть в стандартных обертках для СУБД (JDBC…) 66/69
  26. План  Вводная  Паттерны?  Парадигмы  Паттерны для

    СУБД: что это?  Отношения объектов  Отношения классов  Перекус  Практика Мы здесь 67/69