|
|
|
Как бороться с частыми изменениями схемы данных?
|
|||
|---|---|---|---|
|
#18+
Понимаю, что бизнес не стоит на месте - все растет, все развивается, но как же нам разработчикам учитывать изменения схем данных? Вот и сегодня, мне за 2 дня до отпуска, сказали что нужно внести изменения в тарифный план (план разрабатываем не мы и повлиять на него никак не можем - ведем его для корректного формирования стоимости наших услуг). Но проблема в том, что якобы маленькие изменения в цифрах, на самом деле являются изменениями в существующей схеме данных и там работы не на пару дней. Я понимаю, когда ну раз в 2 года, а лучше раз 5 лет, что-то в схеме данных можно незначительно поменять и скорректировать старые документы под новую схемы, чтобы на них не повлияли изменения, но когда это происходит минимум раз в полгода и когда изменения схемы влекут за собой наслоения "сохранений" старых документов под новые схемы - это становиться адом! Поделитесь пожалуйста опытом борьбы с таким явлением. Есть ли какие либо способы или шаблоны проектирования такого безобразия!? ) Хочется в отпуск... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2013, 23:58 |
|
||
|
Как бороться с частыми изменениями схемы данных?
|
|||
|---|---|---|---|
|
#18+
Как бороться технически или организационно? Технические варианты: 1) Делать запасные поля. 2) Вместо добавления полей делать дополнительную таблицу, связанную с исходной как 1:[0-1]. 3) Использовать сериализованные поля. Например ,строковое поле с содержимым вида "param1=value1;param2=value2". 4) Использовать EAV и подобные структуры. Естественно, любой из вариантов нужно применять осторожно и к месту. Организационные: 1) Добиться, чтобы о будущих изменениях предупреждали не за 2 дня до запуска, а еще на этапе планирования. 2) Начать разбираться в предметной области лучше. Цитирую нашего DBA (который еще и немалую часть БД проектирует и в предметной области понятие имеет) - "хвостом чую, они здесь еще вот это захотят" :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 00:08 |
|
||
|
Как бороться с частыми изменениями схемы данных?
|
|||
|---|---|---|---|
|
#18+
miksoft, в предметной области - съедим и мамонта, но к сожалению, зависимости параметров тарифном плане никак не связаны с предметной областью, а лишь с фантазиями и какими-нибудь периодами у методолога той компании, которая нам план спускает :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 00:14 |
|
||
|
Как бороться с частыми изменениями схемы данных?
|
|||
|---|---|---|---|
|
#18+
miksoft, поля в данном случае никах на схему данных не влияют - на схему данных влияют добаления или убавления зависимостей у у частвующих в БД сущностей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 00:15 |
|
||
|
Как бороться с частыми изменениями схемы данных?
|
|||
|---|---|---|---|
|
#18+
Еще вариант - оторвать бизнес-зависимости от зависимостей в СУБД. Написать свой код (например, хранимые процедуры), реализующий проверку этих бизнес-зависимостей. Дать права на изменение данных только через этот код/хранимки. Есть минус - может резко ухудшиться быстродействие/производительность модификации данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 00:31 |
|
||
|
Как бороться с частыми изменениями схемы данных?
|
|||
|---|---|---|---|
|
#18+
miksoft, еав - ничего не меняет в данном случае - это лишь методология проектирования и на изменения в схеме БД он требует таких же усилий как и при стандартном подходе проектирования ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 00:31 |
|
||
|
Как бороться с частыми изменениями схемы данных?
|
|||
|---|---|---|---|
|
#18+
spmiksoft, еав - ничего не меняет в данном случае - это лишь методология проектирования и на изменения в схеме БД он требует таких же усилий как и при стандартном подходе проектированияЗависит от того, что именно понимать под схемой БД. Физическая схема в EAV не изменяется при изменении логической. Впрочем, настаивать не буду, вам к своим условиям виднее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 00:33 |
|
||
|
Как бороться с частыми изменениями схемы данных?
|
|||
|---|---|---|---|
|
#18+
miksoftЕще вариант - оторвать бизнес-зависимости от зависимостей в СУБД. Написать свой код (например, хранимые процедуры), реализующий проверку этих бизнес-зависимостей. Дать права на изменение данных только через этот код/хранимки. Есть минус - может резко ухудшиться быстродействие/производительность модификации данных. проблема в том чтобы отображать эти зависимости в интерфейсе - а при подходе с сохраненной процедурой ничего не выйдет - она лишь будет отдавать/проверять вставку изменения данных определенной структуры сущности...а ежели и структура сущности данных меняется от плана к плану... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 00:35 |
|
||
|
Как бороться с частыми изменениями схемы данных?
|
|||
|---|---|---|---|
|
#18+
да, и при этом необходимо чтобы, документы, выписываемые задним числом, правильно обрабатывались новой схемой и считали по старым данным! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 00:38 |
|
||
|
Как бороться с частыми изменениями схемы данных?
|
|||
|---|---|---|---|
|
#18+
spпроблема в том чтобы отображать эти зависимости в интерфейсе - а при подходе с сохраненной процедурой ничего не выйдет - она лишь будет отдавать/проверять вставку изменения данных определенной структуры сущности...а ежели и структура сущности данных меняется от плана к плану...Вводите скрипты более высокого уровня. Что-то типа как SQL по отношению к процедурным языкам. Впрочем, реализация может оказаться сложнее, чем каждый раз править код руками. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 00:39 |
|
||
|
Как бороться с частыми изменениями схемы данных?
|
|||
|---|---|---|---|
|
#18+
spда, и при этом необходимо чтобы, документы, выписываемые задним числом, правильно обрабатывались новой схемой и считали по старым данным!Это уже возможно, имхо, только после "человеческого" анализа совместимости старых данных и новой схемы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 00:41 |
|
||
|
Как бороться с частыми изменениями схемы данных?
|
|||
|---|---|---|---|
|
#18+
miksoftspда, и при этом необходимо чтобы, документы, выписываемые задним числом, правильно обрабатывались новой схемой и считали по старым данным!Это уже возможно, имхо, только после "человеческого" анализа совместимости старых данных и новой схемы. при нечеловеческих извращениях методолога!?)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 00:58 |
|
||
|
Как бороться с частыми изменениями схемы данных?
|
|||
|---|---|---|---|
|
#18+
miksoft, если бы мы являлись бы разработчиками тарифного - плана - проблем бы не было - учли бы, домыслили или додумали бы все, но ...есть страшный сволочь методолог в конторе, которая нам спускает план и в разговорах с ним выяснилось - а нету никакой схемы - он типа с потолка хочу тут добавлю, а тут убавлю за счет изобретения условно-подчиненных связей - к примеру, если поставщик Иванов и сегодня пятница и еще и полнолуние - то 1, а если лимузин и на заборе написано х..й то - 2 - а мы то эти связи должны зафиксировать, спроектировать и воплотить! И вот такие у него ассоциации возникают каждый раз при смене тарифов... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 01:03 |
|
||
|
Как бороться с частыми изменениями схемы данных?
|
|||
|---|---|---|---|
|
#18+
spИ вот такие у него ассоциации возникают каждый раз при смене тарифов...А что если однажды отказать ему на основании "потому что гладиулос" ? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 01:37 |
|
||
|
Как бороться с частыми изменениями схемы данных?
|
|||
|---|---|---|---|
|
#18+
spПонимаю, что бизнес не стоит на месте - все растет, все развивается, но как же нам разработчикам учитывать изменения схем данных? ... Поделитесь пожалуйста опытом борьбы с таким явлением. Есть ли какие либо способы или шаблоны проектирования такого безобразия!? ) Хочется в отпуск... Разделить данные и бизнес-логику (БЛ) БЛ - обязана меняться, данные - нет. В частности для вашей задачи нужно спроектировать БД, т.о. чтобы в БД хранились "метаданные" для конструктора тарифных планов. А расчет тарифного плана вынести в код ЯП. Т.е. В БД храниться биллинговая информация. В БД хранятся "методанные" для конструктора тарифов Конструктор тарифов на основе биллинговых данных и "методанных" по тарифам заполняет данные "начисления за услугу". Основная сложность здесь в проектировании схемы для "методанных" для конструктора тарифов. Где-то так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 07:27 |
|
||
|
Как бороться с частыми изменениями схемы данных?
|
|||
|---|---|---|---|
|
#18+
Спасибо sp, затронул очень жизненную тему Data Livetime Cycle. Сталкиваюсь с аналогичной проблемой регулярно 3 раза в год. Регулярность и предсказуемость позволяют планировать внесение изменений и требуют постоянно людские затраты, которые в принципе не возможно избежать. Бизнес с этим согласен и на операционном уровне проблемой не является. Проблема же в моём понимании, это очень большие людские затраты на выявление всех Impacts, и большие на внесение изменений и поддержку накопленный данных. Из всех в этом топике спонтанно приведённых решений нет ни одного приемлемого для моего случая. Для понимания, почему, необходим более глубокий анализ проблемы. Описанные проблема и решения застрагивают только поверхностные изменения в схеме. Что есть схема? Разбиение по таблицам и полям. Другими словами проекция модели данных на физическое представление в базе. Отсюдого видны разные классы изменений: 1. Изменения в схеме модель данных не затрагивают: таблица разделилась, индексы добавились, партиционирование и т. д. Есть много очевидных и простых решений. 2. Модель дополнилась/урезалась атрибутами и изменения переносятся в схему. 3. Изменилась модель данных. Возможно даже что при этом проекция(схема) не меняется. Вот именно последней класс самый ресурсоёмкий. К нему я отношу и проблемы scm. Инмон в работе dw 2.0 тему затрагивает а вот конкретных готовых под ключ решений я пока не видал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 10:40 |
|
||
|
Как бороться с частыми изменениями схемы данных?
|
|||
|---|---|---|---|
|
#18+
О, mikron, заглянь и сюда, плиз: Теоретический вопрос про неизбежность deadlock-ов (последнее сообщение) . :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 10:56 |
|
||
|
Как бороться с частыми изменениями схемы данных?
|
|||
|---|---|---|---|
|
#18+
mikron, в нашем случае операции изменения затрагивают ваши пункты 2 и 3 Я уже решил для себя вообще создавать отдельные сущности тарифных планов и объединять их с помощью "наследования" в БД, а на клиенте при выборе даты будет загружаться нужный экземпляр тарифного плана в плане клиентских компонентов и серверных данных ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 11:13 |
|
||
|
Как бороться с частыми изменениями схемы данных?
|
|||
|---|---|---|---|
|
#18+
Честно говоря, не очень понимаю, почему нельзя сделать структуру данных тарифного плана, которая может пережить любое извращение методолога. Тарифный план - это, грубо говоря, n-мерный куб, измерения которого заданы набором интервалов неких численных параметров. И в чем тут проблема? Отображать n-мерный куб? Добавить измерение n+1 к n-мерному кубу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 11:29 |
|
||
|
Как бороться с частыми изменениями схемы данных?
|
|||
|---|---|---|---|
|
#18+
Кот Матроскин, мне сложно представить о каком кубе вы ведете речь, но о своем коне я вам поведаю - в нашем тарифном плане есть куча атрибутов плана списочного характера с кучей бизнес правил -типа: тут мы читаем, тут не читаем если выбрано то, а тут мы вообще рыбу заворачиваем.. т.е эти атрибуты имеют множественные зависимости и сложную бизнес-логику При изменении тарифов зачастую меняются связи и бизнес логика, редко изменяется и сам список атрибутов. Все это нужно отобразить на клиенте и естественно проверить в БД. Ну у меня никак куб не получается - только конь! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 11:36 |
|
||
|
Как бороться с частыми изменениями схемы данных?
|
|||
|---|---|---|---|
|
#18+
spНо проблема в том, что якобы маленькие изменения в цифрах, на самом деле являются изменениями в существующей схеме данных и там работы не на пару дней.Если изменения на самом деле маленькие, то налицо недостаток модели, которая не может отразить эти маленькие изменения. Если изменения реально большие, то почему бы их не сделать? Неразумно жаловаться, что у вас много заказов и вы слишком хорошо зарабатываете :-) То есть в итоге нужно с одной стороны делать лучше модель, с другой - уметь обосновывать затраты. Был бы интересен пример, когда с точки зрения заказчика изменения маленькие, а с точки зруния разработчика они выливаются в огромную работу "и вообще надо всё переделать". Чаще всего я вижу, что это следстивия плохих моделей, в частности следствие незначительной экономии времени при создании модели БД и/или архитектуры приложения (например, категорическое нежелание делить систему на уровни, типа замапили классы на таблицы каким нибуть ORM, и порядок, а при элементарном изменении объектной модели начинаются охи-ахи). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 11:46 |
|
||
|
Как бороться с частыми изменениями схемы данных?
|
|||
|---|---|---|---|
|
#18+
spПри изменении тарифов зачастую меняются связи и бизнес логика, редко изменяется и сам список атрибутов.Ну вообще это довольно рутинные операции. Ну добавился аттрибут, и что? Скриптик на добавление аттрибутов, изменение ХП таким образом, что бы клиент мог работать со старой и новой базой, потом изменение клиента, использование этих новых аттрибутов. Может, не один день, но и не месяц работы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 11:49 |
|
||
|
Как бороться с частыми изменениями схемы данных?
|
|||
|---|---|---|---|
|
#18+
Расскажу о реальной эволюции крохотной части БД, с которой пришлось столкнуться. Итак, биллинговая система - расчеты с населением за газ. Вопрос цены. 1. Давным-давно, когда система начинала проектироваться, цена была выбита на огромном камне для всего СССР, и не было величины постояннее. Поэтому сначала это была константа в коде. 2. Затем цена стала расти со временем. Появилась таблица PRICES(DATE_ACCEPT, DATE_FROM, PRICE) (две даты - для учета изменений задним числом: в каком отчетном периоде учитывается, с какой расчетной даты пересчитывается). Константа в коде заменилась на функцию get_price(ADATE_ACCEPT, ADATE_FROM), внутри нее сидело обращение к таблице. 3. Затем ученые придумали бытовые счетчики, и, чтобы поощрить население их ставить, сделало цену по счетчикам ниже, чем без них. Программисты поматерились, и ответили на это тремя важными шагами: а) у функции get_price добавили параметр ABONENT_ID. Теперь функция внутри себя лезла в параметры абонента и смотрела, есть ли у него счетчик. б) в зависимости от этого, она по-разному обращалась к таблице PRICES. Туда вроде бы добавили поле PRICE_BY_METER с ценой для счетчиков. Или ввели логический признак WITH_METER и помножили строки. Или вообще сделали новую таблицу. Я специально напускаю в этом месте туману, поскольку уже не помню подробностей, и это правильно. Потому что: в) ...подробности отныне и навеки остались внутри функции get_price. Все прямые SQL-обращения к таблицам PRICE и им подобным были запрещены. 4. Затем цены стали зависеть от многоквартирности дома. Добавили таблицу (или поля, не помню). 5. Затем это отменили, и ввели особые цены для отопления, и для его отсутствия. Добавили таблицу (-..-). 6. Затем вспомнили про автономное отопление в многоквартирных домах, и ввели для него особые цены. Добавили таблицу (-..-). 7. Затем ввели целых десять цен, в зависимости от годового объема потребления газа. Добавили таблицу (-..-). 8. Надо ли говорить, что все эти категории цен продолжали расти со временем. Записи множились. ...А весь остальной код на все это не обращал внимания. Вызывал себе функцию get_price, и все. Ее формат вызова не менялся: get_price(ADATE_ACCEPT, ADATE_FROM, ABONENT_ID). Внутри get_price был большой некрасивый CASE, и, в зависимости от заданного периода и данных абонента, шли обращения к нужным полям нужных таблиц. Но об этом знала только get_price. Мораль: нужно предвидеть, где будут частые изменения в будущем, и максимально программно изолировать этот кусок от остального кода. Как учил товарищ Гради Буч, сложность системы определяется не количеством объектов, а количеством и характером связей между ними. Упрощайте логические связи, не допускайте лишних обращений одних подсистем в потроха к другим. И тогда отдельные подсистемы можно будет переделывать быстро и легко, без ущерба для остальных. Замечание по производительности. Результаты расчетов хранятся в отдельной таблице - расчетной ведомости, которая слегка денормализована: в нее подтянуты фактические значения цен и других параметров, использовавшихся при расчете. Поэтому при формировании отчетов не нужно снова многократно вызывать функцию get_price, которая, конечно, получилась слегка громоздкой, а берутся сохраненные значения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 11:54 |
|
||
|
Как бороться с частыми изменениями схемы данных?
|
|||
|---|---|---|---|
|
#18+
alexeyvg, никакой модели нет - иначе бы я не писал этот топик - если бы была модель и все изменения происходили в рамках этой модели - вообще бы вопрос не стоял! В том то и дело что при каждом изменении речь идет об изменении модели. "Если изменения на самом деле маленькие..." - я же по русски написал что эти маленькие изменения в цифрах влекут за собой БОЛЬШИЕ изменения в схеме - или вы невнимательно читаете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 11:58 |
|
||
|
Как бороться с частыми изменениями схемы данных?
|
|||
|---|---|---|---|
|
#18+
alexeyvgspПри изменении тарифов зачастую меняются связи и бизнес логика, редко изменяется и сам список атрибутов.Ну вообще это довольно рутинные операции. Ну добавился аттрибут, и что? Скриптик на добавление аттрибутов, изменение ХП таким образом, что бы клиент мог работать со старой и новой базой, потом изменение клиента, использование этих новых аттрибутов. Может, не один день, но и не месяц работы. читайте все с самого начала! Про атрибуты речь вообще нигде не шла! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 11:59 |
|
||
|
|

start [/forum/topic.php?fid=32&startmsg=38350940&tid=1541103]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
148ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
| others: | 230ms |
| total: | 482ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...