Инсайт по модели данных
Недавно я читал статьи по моделированию данных и Data Domain.
И внезапно ко мне пришел инсайт — я взглянул под непривычным углом на то, что видел уже много раз.
В 1С есть приходная и расходная накладная. А ведь по сути это один и тот же объект — продажа. Состав полей абсолютно одинаков, потому что операция одна, только отражается или у поставщика или у покупателя.
Поэтому можно было бы делать просто документ Продажа. С признаком отражения у поставщика это был бы аналог расходной накладной, а с признаком отражения у покупателя это был бы аналог приходной накладной.
Понятно, что так делать, скорее всего в реляционных базах данных не будут. А вот в объектных базах возможно.
Кстати, учитывая что операция одинаковая, служебные процедуры тоже похожи, например, пересчеты при комплектации/погрузке товаров у поставщика и пересчеты при приемке у покупателя.
А вот, например, операция перемещения товаров привычно отражается одинаково у отправителя и получателя одним документом «Перемещение товаров».
Никогда раньше об этом не задумывался…
Следующий шаг — ведь поступления товаров тоже не однородны.
Бывают поступления товаров, услуг, на комиссию. Делать отдельные виды документов или поле вида накладной?
Увы, в рамках реляционной модели данных эта задача «красиво» не решается.
Красивому решению мешает кризис IT, который наличествует даже в теме моделирования данных.
Нет, домены данных уже успешно применяются в высоко-корпоративном секторе. Но ведь у большинства пользователей, в основной массе программных проектов, ими даже не пахнет. Инерция в программировании велика, увы.
