- PVSM.RU - https://www.pvsm.ru -
Схема базы данных приложений со сложной доменной моделью (к которым относятся системы ERP) обычно состоит из нескольких сотен таблиц. Поэтому на начальном этапе проектирования базы для избежания многократных дублирований и разбухания схемы важно определиться с несколькими базовыми таблицами для хранения общих свойств базовых сущностей приложения и все остальные таблицы уже проектировать как вспомогательные или дополнения основных таблиц.
Дополняем эти таблицы полем — тип ссылки (для PostgreSQL — подходит enum). При этом запрос к определенному документу обрастает джойнами, но выигрыш в унификации обращения с данными огромен: проверка при удалении документа, сохранение документа, копирование документа для всех полей общих таблиц- будет делаться не специально для каждого из сотни типов документов, а один раз. Плюс у нас появляется возможность множественных ссылок (несколько получателей, котрактов, третьих лиц) для одного документа.
CREATE TYPE ref.module AS ENUM
( 'bdg', 'crm', 'ecm', 'wms', 'scm', ... );
и добавляем поле типа module в эти таблицы. В резутьтате мы имеем общий PK для всех документов приложения, общий код для обработки CRUD, возможность ссылки из любого документа на документ других подсистем, общую систему прав на действия с документом и пр.
В результате количество таблиц и размер кода, работающего с базой сократится на порядок. Все, что нам остается- распространить данный подход к документам на другие
константы (типы и статусы документов, аттрибуты контрагентов, типы связей документов, режимы доступа, типы отправки) и редактируемые справочники (тэги, роли, ..). Создаем две таблицы const и ref и два enum, характеризующий типы записей этих таблиц. И еще две общие таблицы приложения doc.folder и ref.folder для поддержания древовидной структуры документов и редактируемых справочников. Один из недостатков такой унификации — нестрогое ограничение полей на уровне базы (т.е поле «ссылка на тэг документа» будет иметь FK на редактируемый справочник). Предполагается что тип записи редактируемого справочника «Тэг» контролируется на уровне приложения.
Спасибо за внимание, комментарии приветствуются.
Автор: gkislin
Источник [2]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/postgresql/29035
Ссылки в тексте:
[1] ERP River: http://www.riverbpm.com/
[2] Источник: http://habrahabr.ru/post/172177/
Нажмите здесь для печати.