• beskov

Открыта вики, приглашаю участвовать в сборе материала

Открыта для работы вики: DatabaseDesignPatterns.org. В ней предварительно набросаны описания 2-х архитектурных шаблонов. Понятно, что базовым видом описания шаблона должна быть скорее диаграмма, чем текст.

Вот презентация моего вчерашнего выступления на РИТ-2008 с обоснованием того, зачем нужны шаблоны.

Есть идея устроить серию встреч с обсуждением шаблонов в рамках Moscow MySQL User Group, Russian Postgresql User Group или как-то шире.
  • beskov

Эталонные модели предметной области и шаблоны анализа

Типовые структуры уровня бизнес-моделирования и анализа

Если начинать выискивать типовые структуры с самого начала работ по созданию системы - исследования предметной области, то можно выйти на 2 вида структурных моделей:
  1. Эталонные модели "конкретной" предметной области
  2. Шаблоны анализа
Чем первые отличаются от вторых - ценность эталонных моделей в том, что они достоверно передают специфику предметной области, в то время как паттерны, согласно классическим определениям "представляют решение задачи в определённом контексте, однако допускают применение в других контекстах". Иначе говоря, шаблоны более абстрактны, акцентированы на сущностных характеристиках моделируемых объектов, а эталонные модели имеют лучше проработанные детали (атрибуты) и привязку к предметной области.

Эталонные модели

Среди источников эталонных моделей мне известны следующие:
  1. Database Answers - Library of Free Data Models, впрочем, качество моделей здесь зачастую очень низкое и они довольно бесполезны.
  2. The Data Model Resource Book, Vol.1 - A Library of Universal Data Models for All Enterprises, имеет больший уровень абстракции.
Содержит детальные модели по следующим областям общего пользования:
  • People and Organizations - Люди и организации
  • Products - Продукция
  • Ordering Products - Заказ продукции
  • Shipments - Поставки
  • Work Effort - Работы
  • Invoicing - Счета и платежи
  • Accounting and Budgeting - Учёт и бюджетирование
  • Human Resources - Кадры
2-я часть этой книги, The Data Model Resource Book, Vol. 2: A Library of Data Models for Specific Industries, как можно понять, уже более специфична и содержит модели для определённых отраслей, таких как:
  • Manufacturing - Производство
  • Telecommunications - Телекоммуникации
  • Health Care - Здравоохранение
  • Insurance - Страхование
  • Financial Services - Финансовые услуги
  • Professional Services - Профессиональные услуги
  • Travel - Путешествия
  • E-commerce - Электронная торговля
Шаблоны анализа

Довольна известна книга Дэвида Хея Data Model Patterns: A Metadata Map, в которой он опирается на матрицу Захмана для разбиения моделей на разделы:
  • Data - Данные
  • Activities, functions and processes - Действия, функции и процессы
  • Locations - Места
  • People and organizations - Люди и организации
  • Events and timing - События и время
  • Motivation - Мотивация
К сожалению, этой книги у меня нет, потому никаких подробностей и рекомендаций по содержанию дать не могу.

Термин "шаблон анализа", насколько я знаю, ввёл вездесущий Мартин Фаулер, у которого на сайте можно найти несколько статей с шаблонами анализа и который написал в 1997 году книгу с аналогичным названием - Analysis Patterns, где приводит такие шаблоны, как:
  • Accountability - Подотчётность
  • Observations and measurements - Наблюдения и измерения
  • Inventory and accounting - Опись и учёт
  • Planing - Планирование
  • Trading - Торговля
  • Derivative Contracts - Производные договора (?)
  • Trading packages - Торговые пакеты
Предлагаю взять на заметку и при интересе/необходимости изучить соответствующие части приведённых мной источников
  • beskov

Что не так с каноническим "проектированием" РелБД?

Классический сценарий канонического проектирования

Есть такая замечательная штука - каноническое проектирование РБД. К чему оно сводится?
  1. Опишите предметную область.
  2. Постройте на основе описаний модель сущностей и связей (вариант - классов UML).
  3. Превратите эту концептуальную модель в модель таблиц и атрибутов, применив правила преобразования.
  4. Убедитесь в нормальности (3-5НФ) полученной модели, либо доведите её до таковой.
  5. Превратите логическую модель в физическую, используя свойства целевой РСУБД и создайте необходимые физические структуры, опираясь на типовые запросы и нефункциональные требования.
Вот такие вроде простые 5 шагов.

Место проектирования в учебных курсах

Если посмотрим талмуды БД-гуру, то увидим следующие типовые разделы базовых фундаментальных учебников:
  1. Основные понятия.
  2. Реляционная модель.
  3. Проектирование.
  4. SQL.
  5. Транзакции.
  6. Нереляционные БД.
С одной стороны - проектирование (а тут оно только каноническое) занимает центральное место в курсе, с другой - на него отводится не более 100 страниц из 1000 страниц тома. Неужели и правда всё так просто?

Практика показывает, что нет. Реально на этапе 1 (описание предметной области) есть два принципиально разных категории предметных областей - существующая и создаваемая. Вот только вторая тихой сапой откладывается до этапа 5.

Анализ как моделирование существующего (настоящего ) и проектирование как моделирование несуществующего (будущего)

Существующая предметная область - это то, что уже есть и описание чего можно извлечь из своего жизненного опыта, интервьюирования экспертов предметной области, альбомов отраслевых моделей (которые мы рассмотрим позже), нормативной и производственной документации. Фактически построение модели структуры существующей предметной области является сугубо аналитической, а не проектировочной деятельностью, особенно если не прибегать к конструированию из альбомов типовых моделей. Сотрудники-Отделы-Детали-Заказы-Клиенты-Документы-Рейсы - это всё сюда.

Создаваемая предметная область - это те концепции и понятия, которые нет сейчас в автоматизируемом пространстве, и которые возникнут только уже внутри системы в момент её создания. Речь идёт о структурах, которые призваны обеспечить работу ПО (системы) исходя из функциональных требований, а не существующей предметной области. Ключевое слово-Учётная запись-Узел-Категория-Версия.

(Если всему этому есть какие-то более удобные и традиционные термины - подскажите, плиз).

Утерянное искусство проектирования

Так вот, я хочу сказать, что деятельность по моделированию и созданию структур данных, содержащих информационные модели уже существующих объектов (бизнес-объектов, этапы 1-4) является довольно банальной и прямолинейной. И хотя именно ей уделяется больше всего места в учебных курсах, она не является определяющей в умении создавать промышленные системы. А это и не проектирование вовсе! А всего лишь анализ + применение правил трансформации :(

В отличие от истинного проектирования (БД) - создания структурных моделей того, чего пока нет.

В качестве примера приведу такие распространённые задачи проектирования, как организация версионирования объектов, аудита изменений, управление метаданными, организация хранения иерархий, организация подсистемы поиска.

Конечно, кто-то может сказать, что это задачи проектирования системы вцелом, а не только проектирования БД и будет по своему прав, но я хочу напомнить, что в этих задачах правильный выбор (aka "проектирование") реляционных (и не только) структур является одним из ключевых навыков.

Но где и как этим навыкам можно научиться? Мне на ум приходит только каноническая Кнутовская "Алгоритмы и структуры данных", но не помню, чтобы там рассматривались задачи такого рода. Может вы знаете достойные стандартные источники?
  • beskov

Вступление - Про причины

Что стало причиной создания сообщества?
Дисциплине проектирования баз данных уже несколько десятилетий, вместе с тем основной костяк существующей учебной литературы повящён главным образом каноническому проектированию реляционных БД. В то же время традиционные зрелые инженерные дисциплины, такие как машиностроение, электроника, строительство и т.д. помимо разнообразия теоретического материала значительное внимание уделяют накоплению опыта инженерных решений - речь идёт об альбомах типовых форм, каталогах конструкций и т.д. Есть желание преодолеть эту ситуацию незрелости в нашей области.

Отдельная тема - то, что учитывая низкий порог вхождения в область разработки ПО и баз даных в частности, в отрасли много неофитов, которые порождают в сетевых форумах бесконечные вопросы из серии RTFM. С одной стороны, можно их отсылать к Граберу, Дейту, Конноли, Ульману, Кодду, но характер неофитских задач (быстро сделать что-то не особо важное не коленке) не способствует чтению тысячестраничных талмудов БД-гуру.

Я могу условно выделить 3 категории разработчиков, с которыми можно иметь дело:
  1. Начинающие, активно изучающие и применяющие каноническое проектирование.
  2. Опытные, знающие недостатки канонического проектирования + специфику и типовые решения ПРОМЫШЛЕННЫХ БД.
  3. Профессионалы-гуру с многолетним опытом.
Мне представляется интересной задача по подготовке 2-й категории из 1-й. Что для этого нужно?
Накопить материал, собственно те промышленные решения, которые не встречаются в классических учебниках.