|
|
|
Проектирование атомарных справочников...
|
|||
|---|---|---|---|
|
#18+
Добрый день, сообщество! Хотелось бы разъяснить следующий вопрос, из за которого я со своим руководителем сцепился не на жизнь, а на смерть! Рассмотрим, стандартную ситуацию: справочник заявок и атомарный справочник статусов заявок(открыта, закрыта, в процессе, это к примеру), в них связь один-ко-многим. Из справочник статусов формируется(select id value, name display from status) list of values(GUI элемент selectlist), из которого я и выбираю значение, а в таблицу заявок вставляется его код. И таких пар в схеме может быть много, с использованием атомарных справочников. Это обычный академический вариант, предложенный мной. Руководитель предлагает: Все эти справочники "согнать" в один общий справочник(аттрибуты: имя справочника, значение(аббревиатура), описание(то что пользователь будет видеть в приложении)), в котором будет поле "имя справочника", и по фильтру на котором я и получю нужный list of values. То есть никакой физической связи со справочником заявок не будет, а вся логика будет перенесена на уровень приложения, где я буду отслеживать из какого справочника мне нужен именно в этой таблице взять значение. Ладно я выбери из списка в приложении именно тот справочник и выберу в нем значение, и что дальше? что я вставлю в status таблицы заявок, код из общей таблицы справочников? А если какой нибудь справочник надо поменять, и не изменить значение, а добавить, то все записи сдвинутся, и коды поменяются(рассматриваю вариант с полным пересозданием) и тогда вообще будет охинея. А если вставлять не код, а как предлагает руководитель "значение", и типа это "значение" должно быть уникально во всех справочниках, но может же быть ситуация, что в разных справочниках может быть одно и тоже буквенное сочетание, но разное по описанию. То есть вставив это "значение", я не смогу произвести обратную трансформацию в display name статуса, так как мне возратится не одна запись а несколько из глобального справочника. Что бы обойти это, то нужно еще накладывать большую логику на приложение, что бы мне искать в глоб справочнике значение по определенному справочнику в зависимости от текущего состояния приложения. Еще выход - что бы сослаться уникально, то нужно использовать связку имя "справочника-значение" и хранить ее в id_status таблицы заявки. Соответственно здесь получается никакой физ. связи между мастер таблицей и атомарным справочником, и если поменяется что то в глобальной таблице это не приведет в изменении в ней. Надо жестко все контролировать на уровне приложения. Но это как то получается все оч толсто!!! Но руководитель настаивает что это бэст практишь и вообще все отходят от форин ключей, и хранят сами значения, а не ссылки на них ввиде идентификатора, как по науке. Вообщем такая, казалось бы, простая ситуация завела в "тупик"! Коллеги, что можете сказать по данной ситуации, что все таки является бэст практишь? Спасибо за ответы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 13:24 |
|
||
|
Проектирование атомарных справочников...
|
|||
|---|---|---|---|
|
#18+
kasik<> Коллеги, что можете сказать по данной ситуации, что все таки является бэст практишь? <>наилучшей практикой является поменять рукомахателя ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 13:30 |
|
||
|
Проектирование атомарных справочников...
|
|||
|---|---|---|---|
|
#18+
qwwq...поменять рукомахателя Это не имеет отношения в сабжу! интересует практика... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 13:33 |
|
||
|
Проектирование атомарных справочников...
|
|||
|---|---|---|---|
|
#18+
вообще все отходят от форин ключей, и хранят сами значенияТут нет единственно правильного решения. Форин-ключи мешают, если необходимо перенести часть данных в другую аналогичную систему (могут "задвоиться"). Необходимы некоторые усилия, чтобы поддерживать ключи-значения в читабельном и понятном виде. Решение вытекает от правильно поставленных задач. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 13:49 |
|
||
|
Проектирование атомарных справочников...
|
|||
|---|---|---|---|
|
#18+
kasikинтересует практика... 1. хранить ссылки, а не "значения" 2. хранить все в одной таблице - только если вы делаете не оригинальную прогу, а конструктор ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 13:55 |
|
||
|
Проектирование атомарных справочников...
|
|||
|---|---|---|---|
|
#18+
kasikникакой физической связи со справочником заявок не будет Куда денется? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 13:58 |
|
||
|
Проектирование атомарных справочников...
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovkasikникакой физической связи со справочником заявок не будет Куда денется? Если ссылаться на внутренний ИД значения справочника, а не уникальный ИД записи то ФК не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 14:09 |
|
||
|
Проектирование атомарных справочников...
|
|||
|---|---|---|---|
|
#18+
kasikВсе эти справочники "согнать" в один общий справочник(аттрибуты: имя справочника, значение(аббревиатура), описание(то что пользователь будет видеть в приложении))Очень распространенный способ, обычно даже предпочтительный, если есть уверенность, что значения не будут обрастать атрибутами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 14:12 |
|
||
|
Проектирование атомарных справочников...
|
|||
|---|---|---|---|
|
#18+
Infernal V. RavenЕсли ссылаться на внутренний ИД значения справочника, а не уникальный ИД записи то ФК не будет. А какой идиот не ссылается на первичный ключ?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 14:27 |
|
||
|
Проектирование атомарных справочников...
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Потому что это не есть уникальное определение определенного дискрипшена в глобальном справочнике, если брать все таки в учет что жизнь не статика, а что то может добавится, что приведет к сдвигу в этом глобальном справочнике. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 14:36 |
|
||
|
Проектирование атомарных справочников...
|
|||
|---|---|---|---|
|
#18+
kasik, Непонятно, о каком "сдвиге" Вы говорите. В нормальных системах существующие строки не меняются, если надо добавить в таблицу новую строку. По основной теме - единый метасправочник, как предлагает Ваш начальник, делать можно (ну если не считать странной идеи про хранение значений). Обычно для этого требуются причины (поскольку в общем случае это менее прямой способ, чем "классический"), есть ли они в Вашем случае - отсюда судить затруднительно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 14:47 |
|
||
|
Проектирование атомарных справочников...
|
|||
|---|---|---|---|
|
#18+
Кот Матроскин, имеется ввиду что сейчас не продакшен, когда больше ничего в атомарных справочниках не меняется, а девелопмент-система, когда еще может быть изменения, как редактирования значений так и добавления их. Используется case-средство Oracle data modeler, дак вот за эти справочники отвечают так называемые домены, но при генерации они выражаются как в check constrans, что не совсем удобно, произведя некоторые манипуляции с импортов в бд метаданных проекта, вытаскиваю эти домены в одну таблицу - глобальный справочник. То есть каждый раз мне нужно его пересоздавать заново, так проще. и соответственно сиквенсы все собьются и ссылки будут уже на другое значения описания! А если как говорите вы, то это мне нужно делать дополнительную манипуляцию по вычислению разницы между двумя глобальными справочниками, новым и старым и добавлять только те значения, которые добавились, а если произошли изменения в значении описания.... Вообщем как то так, куда не кинь везде клин! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 15:03 |
|
||
|
Проектирование атомарных справочников...
|
|||
|---|---|---|---|
|
#18+
kasikНо руководитель настаивает что это бэст практишь и вообще все отходят от форин ключейБессовестно врет. Ну или добросовестно заблуждается. Как Сердюков kasikКоллеги, что можете сказать по данной ситуации, что все таки является бэст практишь?Бэст практишь по этой ситуации описал qwwq. Кто принимает окончательное решение, тот и прав. Насколько я понимаю, какое бы решение вы ни приняли, из-за него проект не провалится, максимум увеличится количество геморроя. Считаете начальника дятлом - найдите умного или сами стеньте начальником. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 15:08 |
|
||
|
Проектирование атомарных справочников...
|
|||
|---|---|---|---|
|
#18+
Один раз вытащил свои "домены" в глобальный справочник и убил их. Всё, проблема решена. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 15:10 |
|
||
|
Проектирование атомарных справочников...
|
|||
|---|---|---|---|
|
#18+
kasikИспользуется case-средство Oracle data modelerЕсли вам водка мешает работать... Может, ну его, это case-средство? Я когда-то тоже пытался всей этой фигней страдать, потом понял, что лучшее средство создавать объекты в БД - это писать вручную скрипты "create table ..." и заполнять справочники аналогично - написанными вручную "insert into". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 15:12 |
|
||
|
Проектирование атомарных справочников...
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovА какой идиот не ссылается на первичный ключ?.. Да много кто. Oracle, например, в OeBS :) Если у меня будет тыща справочников в виде ключ-значение по 2-3 значения, то смысла делать тыщу таблиц и запариваться с их ФК я не вижу никакого. Но если мсье знает толк в извращениях - наслаждайтесь :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 15:18 |
|
||
|
Проектирование атомарных справочников...
|
|||
|---|---|---|---|
|
#18+
rockclimberЕсли вам водка мешает работать... Может, ну его, это case-средство? Я когда-то тоже пытался всей этой фигней страдать, потом понял, что лучшее средство создавать объекты в БД - это писать вручную скрипты "create table ..." и заполнять справочники аналогично - написанными вручную "insert into".Собрались мы как-то студентами на квартире. Так сказать культурно отдохнуть. Была и гитара, которая пошла в ход после некоторого времени. Хозяин квартиры был более продвинутым (:)) музыкантом и решил помочь - включил метроном. На что гитарист/вокалист, через некоторое время сказал: "Выключи, он меня сбивает". Это я к чему. Если CASE-средства вам мешают, так может стоит научиться их использовать по назначению? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 15:24 |
|
||
|
Проектирование атомарных справочников...
|
|||
|---|---|---|---|
|
#18+
Infernal V. RavenDimitry SibiryakovА какой идиот не ссылается на первичный ключ?.. Да много кто. Oracle, например, в OeBS :) Вот он про это постоянно и говорит, что сам оракл давно это использует. Вижу еще одни + глобального листа - управления расположение в gui-селектлисте, например в справочнике городов, наверху всегда должны самые часто используемые - Питер, Москва и тд и тп. Но этот сиквенс можно вести и в отдельных справочниках, так что профит... Значит получается: Использовать глобальный справочник нужно с обычными идентификаторами через сиквенс, а добавлять новые последовательно, что бы не было сдвигов. И он будет условно-статичный в части статичных, неменяемых, идентификаторов. Пока так вижу выход... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 16:03 |
|
||
|
Проектирование атомарных справочников...
|
|||
|---|---|---|---|
|
#18+
kasikВижу еще одни + глобального листа - управления расположение в gui-селектлисте, например в справочнике городов, наверху всегда должны самые часто используемые - Питер, Москва и тд и тп. Но этот сиквенс можно вести и в отдельных справочниках, так что профит... Значит получается: Использовать глобальный справочник нужно с обычными идентификаторами через сиквенс, а добавлять новые последовательно, что бы не было сдвигов. И он будет условно-статичный в части статичных, неменяемых, идентификаторов. Пока так вижу выход...Я мало что понял. Приведу описание типового решения: Таблица перечислений - (такой вид справочников называем так, ну или справочники ListOfValues) - Код справочника - строка - уникальный код - Название - строка -краткое название - Описание - строка - описание справочника Таблица значений - Код справочника - строка - Код значения - строка - уникальный код значения внутри справочника. Обеспечивается уникальным индексом Код справочника + Код значения) - Название - строка - Описание - строка Коды представлены строками для удобства. Например те же статусы обрабатываются в коде и использование строковых значений повышает читаемость. Дополнительно (в зависимости от СУБД, условий) вводятся: - уникальный ИД - целое - автоинкримент или сиквенс - видимость - булево - можно скрывать значения Также вводятся функции или ХП получения списков значений. Далее в GUI можно ввести контрол работы со значением справочника, в котором указывается имя справочника. Это если такого контрола еще нет. kasikВижу еще одни + глобального листа - управления расположение в gui-селектлисте, например в справочнике городов, наверху всегда должны самые часто используемые - Питер, Москва и тд и тп. Города в такой справочник я бы не выносил, поскольку география отталкивается обычно от хоть каких-то адресных классификаторов с известной структурой. В РФ это КЛАДР, ФИАС или еще что-то. Для Москвы, например, адресный справочник БТИ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 17:21 |
|
||
|
Проектирование атомарных справочников...
|
|||
|---|---|---|---|
|
#18+
kasik Все эти справочники "согнать" в один общий справочникИдея "универсального" справочника просто обязана придти в голову каждого начинающего проектировщика. Это как детские болезни - оба-на смотри братва как я умею. Кроме лишнего кода для дополнительной проверки в приложении, остальные недостатки данного подхода маловероятны. Правда по зрелому размышлению достоинств у данной структуры НЕТ ВООБЩЕ. Поищите здесь по сочетанию "универсальные справочники" найдете много флейма. Infernal V. Raven Если у меня будет тыща справочников в виде ключ-значение по 2-3 значения, то смысла делать тыщу таблиц и запариваться с их ФК я не вижу никакогоНу придется делать тыщу вьюх - чем легче станет? Сущность то никуда не делась. А много похожих таблиц легко автоматизируется при условии соблюдения соглашений о наименованиях. kasik А если вставлять не код, а как предлагает руководитель "значение",Любитель естественных ключей детектед. Опять же ищите по сочетанию "естественные ключи vs суррогаты" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 17:53 |
|
||
|
Проектирование атомарных справочников...
|
|||
|---|---|---|---|
|
#18+
Вообщем все слилось в холивар, который я начал! Так? Значит и тот и другой вариант "хорош", и отталкиваемся лишь от архитектора, который несет ответственность за все в целом. Просто я подозреваю чем это может закончится, я буду работать с "***ном" и окажусь еще и крайним. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 18:24 |
|
||
|
Проектирование атомарных справочников...
|
|||
|---|---|---|---|
|
#18+
SERG1257Правда по зрелому размышлению достоинств у данной структуры НЕТ ВООБЩЕ.На мой взгляд слишком категоричное утверждение. SERG1257Ну придется делать тыщу вьюх - чем легче станет? Сущность то никуда не делась. А много похожих таблиц легко автоматизируется при условии соблюдения соглашений о наименованиях.А зачем тысяча вьюх? Для запросов, где нужно вытащить значение выполняться JOIN таблицы значений с условием Справочник='МойСправочник' и КодВТаблице=КодЗначения. Притом это требуется в основном для отображения списочных форм и отчетов. А в формах используются контролы, которые сами уже умеют вытаскивать нужные данные. kasik Любитель естественных ключей детектед. Опять же ищите по сочетанию "естественные ключи vs суррогаты"В свое время был апологетом суррогатных ключей. Пока не пришлось заняться с тиражируемыми системами :) Если логика приложения плотно завязана на значения справочника, то код Код: sql 1. 2. 3. 4. читаем и сопровождаем. С суррогатами такой фокус не прокатывает. А ФК, кстати, снижают производительность поэтому, например, иметь таблицу в нагруженной OLTP-системе со 100 справочными полями для массовой вставки нецелесообразно. А без ФК я смысла в 1000 таблиц справочника не вижу вообще. Я не являюсь противником классического подхода с организацией в виде таблиц, но являюсь противником бездумного следования какой-то одной идеологии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 18:33 |
|
||
|
Проектирование атомарных справочников...
|
|||
|---|---|---|---|
|
#18+
kasikВообщем все слилось в холивар, который я начал! Так?Да вроде нет. Иначе бы тут уже 100 страниц было бы. kasikЗначит и тот и другой вариант "хорош", и отталкиваемся лишь от архитектора, который несет ответственность за все в целом. Конечно это задача архитектора. Насчет этой задачи могу порекомендовать осмотрительнее подходить к выбору способа реализации каждого справочника (таблица/перечисление). Если есть достаточно веские подозрения, что: - справочник будет иерархический - справочник будет иметь доп.значения помимо код/значение - объем справочника не влазит в комбобокс :) (скажем у меня больше 100 значений вызовут подозрение) то стоит реализовывать справочник в виде таблицы. В ином случае можно загнать в справочник перечислений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 18:47 |
|
||
|
Проектирование атомарных справочников...
|
|||
|---|---|---|---|
|
#18+
В моем случаи, получается, какой способ использовать что бы не было "бездумного следования какой-то одной идеологии"!? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 18:48 |
|
||
|
Проектирование атомарных справочников...
|
|||
|---|---|---|---|
|
#18+
Infernal V. Raven На мой взгляд слишком категоричное утверждение. Приведите нормальный реальный измеримый выигрыш. Хоть один. Замена нормальных физических таблиц логическими (размазанными по приложению запросами или вьюхами) ну никак не тянет на выигрыш. Зачем делать за СУБД ее работу? Infernal V. Raven А в формах используются контролы, которые сами уже умеют вытаскивать нужные данные.Сами это как? Я бы предположил, что прежде чем контролы сами будут вытаскивать данные им надо либо указать на таблицу/вьюху или написать запрос. Infernal V. Raven С суррогатами такой фокус не прокатывает.Одно другому не мешает. У значения справочника есть айди для ссылочной целостности (и только для ссылочной целостности), есть код или мнемокод для вашего примера, есть наименование для чтения пользователем, может быть длинное описание для вывода отчета. Infernal V. Raven А ФК, кстати, снижают производительность поэтому, например, иметь таблицу в нагруженной OLTP-системе со 100 справочными полями для массовой вставки нецелесообразно.Дайте определение массовой вставки. Для OLTP-системы заливка данных разовое мероприятие. А для поштучных вставок ФК - самый дешевый способ обеспечить целостность. Infernal V. Raven но являюсь противником бездумного следования какой-то одной идеологии. Согласен, но данной сферической задачи в вакууме начинать надо с правильного подхода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 18:51 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=38529712&tid=1540946]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
157ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
| others: | 260ms |
| total: | 529ms |

| 0 / 0 |

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