powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Проектирование атомарных справочников...
25 сообщений из 325, страница 1 из 13
Проектирование атомарных справочников...
    #38529502
kasik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, сообщество!

Хотелось бы разъяснить следующий вопрос, из за которого я со своим руководителем сцепился не на жизнь, а на смерть!

Рассмотрим, стандартную ситуацию: справочник заявок и атомарный справочник статусов заявок(открыта, закрыта, в процессе, это к примеру), в них связь один-ко-многим. Из справочник статусов формируется(select id value, name display from status) list of values(GUI элемент selectlist), из которого я и выбираю значение, а в таблицу заявок вставляется его код.
И таких пар в схеме может быть много, с использованием атомарных справочников.
Это обычный академический вариант, предложенный мной.

Руководитель предлагает:
Все эти справочники "согнать" в один общий справочник(аттрибуты: имя справочника, значение(аббревиатура), описание(то что пользователь будет видеть в приложении)), в котором будет поле "имя справочника", и по фильтру на котором я и получю нужный list of values. То есть никакой физической связи со справочником заявок не будет, а вся логика будет перенесена на уровень приложения, где я буду отслеживать из какого справочника мне нужен именно в этой таблице взять значение. Ладно я выбери из списка в приложении именно тот справочник и выберу в нем значение, и что дальше? что я вставлю в status таблицы заявок, код из общей таблицы справочников? А если какой нибудь справочник надо поменять, и не изменить значение, а добавить, то все записи сдвинутся, и коды поменяются(рассматриваю вариант с полным пересозданием) и тогда вообще будет охинея. А если вставлять не код, а как предлагает руководитель "значение", и типа это "значение" должно быть уникально во всех справочниках, но может же быть ситуация, что в разных справочниках может быть одно и тоже буквенное сочетание, но разное по описанию. То есть вставив это "значение", я не смогу произвести обратную трансформацию в display name статуса, так как мне возратится не одна запись а несколько из глобального справочника. Что бы обойти это, то нужно еще накладывать большую логику на приложение, что бы мне искать в глоб справочнике значение по определенному справочнику в зависимости от текущего состояния приложения. Еще выход - что бы сослаться уникально, то нужно использовать связку имя "справочника-значение" и хранить ее в id_status таблицы заявки. Соответственно здесь получается никакой физ. связи между мастер таблицей и атомарным справочником, и если поменяется что то в глобальной таблице это не приведет в изменении в ней. Надо жестко все контролировать на уровне приложения.

Но это как то получается все оч толсто!!!
Но руководитель настаивает что это бэст практишь и вообще все отходят от форин ключей, и хранят сами значения, а не ссылки на них ввиде идентификатора, как по науке.

Вообщем такая, казалось бы, простая ситуация завела в "тупик"!

Коллеги, что можете сказать по данной ситуации, что все таки является бэст практишь?

Спасибо за ответы
...
Рейтинг: 0 / 0
Проектирование атомарных справочников...
    #38529516
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kasik<>
Коллеги, что можете сказать по данной ситуации, что все таки является бэст практишь?
<>наилучшей практикой является поменять рукомахателя
...
Рейтинг: 0 / 0
Проектирование атомарных справочников...
    #38529521
kasik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwq...поменять рукомахателя

Это не имеет отношения в сабжу! интересует практика...
...
Рейтинг: 0 / 0
Проектирование атомарных справочников...
    #38529556
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вообще все отходят от форин ключей, и хранят сами значенияТут нет единственно правильного решения.
Форин-ключи мешают, если необходимо перенести часть данных в другую аналогичную систему (могут "задвоиться").
Необходимы некоторые усилия, чтобы поддерживать ключи-значения в читабельном и понятном виде.

Решение вытекает от правильно поставленных задач.
...
Рейтинг: 0 / 0
Проектирование атомарных справочников...
    #38529568
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kasikинтересует практика...
1. хранить ссылки, а не "значения"
2. хранить все в одной таблице - только если вы делаете не оригинальную прогу, а конструктор
...
Рейтинг: 0 / 0
Проектирование атомарных справочников...
    #38529579
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kasikникакой физической связи со справочником заявок не будет
Куда денется?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Проектирование атомарных справочников...
    #38529598
Фотография Infernal V. Raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovkasikникакой физической связи со справочником заявок не будет
Куда денется?
Если ссылаться на внутренний ИД значения справочника, а не уникальный ИД записи то ФК не будет.
...
Рейтинг: 0 / 0
Проектирование атомарных справочников...
    #38529600
Фотография Infernal V. Raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kasikВсе эти справочники "согнать" в один общий справочник(аттрибуты: имя справочника, значение(аббревиатура), описание(то что пользователь будет видеть в приложении))Очень распространенный способ, обычно даже предпочтительный, если есть уверенность, что значения не будут обрастать атрибутами.
...
Рейтинг: 0 / 0
Проектирование атомарных справочников...
    #38529627
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Infernal V. RavenЕсли ссылаться на внутренний ИД значения справочника, а не
уникальный ИД записи то ФК не будет.
А какой идиот не ссылается на первичный ключ?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Проектирование атомарных справочников...
    #38529645
kasik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,
Потому что это не есть уникальное определение определенного дискрипшена в глобальном справочнике, если брать все таки в учет что жизнь не статика, а что то может добавится, что приведет к сдвигу в этом глобальном справочнике.
...
Рейтинг: 0 / 0
Проектирование атомарных справочников...
    #38529665
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kasik,

Непонятно, о каком "сдвиге" Вы говорите. В нормальных системах существующие строки не меняются, если надо добавить в таблицу новую строку.
По основной теме - единый метасправочник, как предлагает Ваш начальник, делать можно (ну если не считать странной идеи про хранение значений). Обычно для этого требуются причины (поскольку в общем случае это менее прямой способ, чем "классический"), есть ли они в Вашем случае - отсюда судить затруднительно.
...
Рейтинг: 0 / 0
Проектирование атомарных справочников...
    #38529695
kasik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот Матроскин,

имеется ввиду что сейчас не продакшен, когда больше ничего в атомарных справочниках не меняется, а девелопмент-система, когда еще может быть изменения, как редактирования значений так и добавления их.

Используется case-средство Oracle data modeler, дак вот за эти справочники отвечают так называемые домены, но при генерации они выражаются как в check constrans, что не совсем удобно, произведя некоторые манипуляции с импортов в бд метаданных проекта, вытаскиваю эти домены в одну таблицу - глобальный справочник. То есть каждый раз мне нужно его пересоздавать заново, так проще. и соответственно сиквенсы все собьются и ссылки будут уже на другое значения описания! А если как говорите вы, то это мне нужно делать дополнительную манипуляцию по вычислению разницы между двумя глобальными справочниками, новым и старым и добавлять только те значения, которые добавились, а если произошли изменения в значении описания....

Вообщем как то так, куда не кинь везде клин!
...
Рейтинг: 0 / 0
Проектирование атомарных справочников...
    #38529706
rockclimber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kasikНо руководитель настаивает что это бэст практишь и вообще все отходят от форин ключейБессовестно врет. Ну или добросовестно заблуждается. Как Сердюков

kasikКоллеги, что можете сказать по данной ситуации, что все таки является бэст практишь?Бэст практишь по этой ситуации описал qwwq. Кто принимает окончательное решение, тот и прав. Насколько я понимаю, какое бы решение вы ни приняли, из-за него проект не провалится, максимум увеличится количество геморроя. Считаете начальника дятлом - найдите умного или сами стеньте начальником.
...
Рейтинг: 0 / 0
Проектирование атомарных справочников...
    #38529712
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Один раз вытащил свои "домены" в глобальный справочник и убил их. Всё, проблема решена.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Проектирование атомарных справочников...
    #38529718
rockclimber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kasikИспользуется case-средство Oracle data modelerЕсли вам водка мешает работать... Может, ну его, это case-средство? Я когда-то тоже пытался всей этой фигней страдать, потом понял, что лучшее средство создавать объекты в БД - это писать вручную скрипты "create table ..." и заполнять справочники аналогично - написанными вручную "insert into".
...
Рейтинг: 0 / 0
Проектирование атомарных справочников...
    #38529733
Фотография Infernal V. Raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovА какой идиот не ссылается на первичный ключ?..
Да много кто. Oracle, например, в OeBS :)
Если у меня будет тыща справочников в виде ключ-значение по 2-3 значения, то смысла делать тыщу таблиц и запариваться с их ФК я не вижу никакого. Но если мсье знает толк в извращениях - наслаждайтесь :)
...
Рейтинг: 0 / 0
Проектирование атомарных справочников...
    #38529740
Фотография Infernal V. Raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rockclimberЕсли вам водка мешает работать... Может, ну его, это case-средство? Я когда-то тоже пытался всей этой фигней страдать, потом понял, что лучшее средство создавать объекты в БД - это писать вручную скрипты "create table ..." и заполнять справочники аналогично - написанными вручную "insert into".Собрались мы как-то студентами на квартире. Так сказать культурно отдохнуть. Была и гитара, которая пошла в ход после некоторого времени. Хозяин квартиры был более продвинутым (:)) музыкантом и решил помочь - включил метроном. На что гитарист/вокалист, через некоторое время сказал: "Выключи, он меня сбивает".

Это я к чему. Если CASE-средства вам мешают, так может стоит научиться их использовать по назначению?
...
Рейтинг: 0 / 0
Проектирование атомарных справочников...
    #38529819
kasik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Infernal V. RavenDimitry SibiryakovА какой идиот не ссылается на первичный ключ?..
Да много кто. Oracle, например, в OeBS :)


Вот он про это постоянно и говорит, что сам оракл давно это использует.

Вижу еще одни + глобального листа - управления расположение в gui-селектлисте, например в справочнике городов, наверху всегда должны самые часто используемые - Питер, Москва и тд и тп. Но этот сиквенс можно вести и в отдельных справочниках, так что профит...

Значит получается:
Использовать глобальный справочник нужно с обычными идентификаторами через сиквенс, а добавлять новые последовательно, что бы не было сдвигов. И он будет условно-статичный в части статичных, неменяемых, идентификаторов.
Пока так вижу выход...
...
Рейтинг: 0 / 0
Проектирование атомарных справочников...
    #38529948
Фотография Infernal V. Raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kasikВижу еще одни + глобального листа - управления расположение в gui-селектлисте, например в справочнике городов, наверху всегда должны самые часто используемые - Питер, Москва и тд и тп. Но этот сиквенс можно вести и в отдельных справочниках, так что профит...

Значит получается:
Использовать глобальный справочник нужно с обычными идентификаторами через сиквенс, а добавлять новые последовательно, что бы не было сдвигов. И он будет условно-статичный в части статичных, неменяемых, идентификаторов.
Пока так вижу выход...Я мало что понял. Приведу описание типового решения:

Таблица перечислений - (такой вид справочников называем так, ну или справочники ListOfValues)
- Код справочника - строка - уникальный код
- Название - строка -краткое название
- Описание - строка - описание справочника

Таблица значений
- Код справочника - строка
- Код значения - строка - уникальный код значения внутри справочника. Обеспечивается уникальным индексом Код справочника + Код значения)
- Название - строка
- Описание - строка

Коды представлены строками для удобства. Например те же статусы обрабатываются в коде и использование строковых значений повышает читаемость.

Дополнительно (в зависимости от СУБД, условий) вводятся:
- уникальный ИД - целое - автоинкримент или сиквенс
- видимость - булево - можно скрывать значения

Также вводятся функции или ХП получения списков значений. Далее в GUI можно ввести контрол работы со значением справочника, в котором указывается имя справочника. Это если такого контрола еще нет.

kasikВижу еще одни + глобального листа - управления расположение в gui-селектлисте, например в справочнике городов, наверху всегда должны самые часто используемые - Питер, Москва и тд и тп.
Города в такой справочник я бы не выносил, поскольку география отталкивается обычно от хоть каких-то адресных классификаторов с известной структурой. В РФ это КЛАДР, ФИАС или еще что-то. Для Москвы, например, адресный справочник БТИ.
...
Рейтинг: 0 / 0
Проектирование атомарных справочников...
    #38529980
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kasik Все эти справочники "согнать" в один общий справочникИдея "универсального" справочника просто обязана придти в голову каждого начинающего проектировщика. Это как детские болезни - оба-на смотри братва как я умею. Кроме лишнего кода для дополнительной проверки в приложении, остальные недостатки данного подхода маловероятны. Правда по зрелому размышлению достоинств у данной структуры НЕТ ВООБЩЕ. Поищите здесь по сочетанию "универсальные справочники" найдете много флейма.

Infernal V. Raven Если у меня будет тыща справочников в виде ключ-значение по 2-3 значения, то смысла делать тыщу таблиц и запариваться с их ФК я не вижу никакогоНу придется делать тыщу вьюх - чем легче станет? Сущность то никуда не делась. А много похожих таблиц легко автоматизируется при условии соблюдения соглашений о наименованиях.

kasik А если вставлять не код, а как предлагает руководитель "значение",Любитель естественных ключей детектед. Опять же ищите по сочетанию "естественные ключи vs суррогаты"
...
Рейтинг: 0 / 0
Проектирование атомарных справочников...
    #38530031
kasik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообщем все слилось в холивар, который я начал!

Так?

Значит и тот и другой вариант "хорош", и отталкиваемся лишь от архитектора, который несет ответственность за все в целом.

Просто я подозреваю чем это может закончится, я буду работать с "***ном" и окажусь еще и крайним.
...
Рейтинг: 0 / 0
Проектирование атомарных справочников...
    #38530037
Фотография Infernal V. Raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SERG1257Правда по зрелому размышлению достоинств у данной структуры НЕТ ВООБЩЕ.На мой взгляд слишком категоричное утверждение.
SERG1257Ну придется делать тыщу вьюх - чем легче станет? Сущность то никуда не делась. А много похожих таблиц легко автоматизируется при условии соблюдения соглашений о наименованиях.А зачем тысяча вьюх? Для запросов, где нужно вытащить значение выполняться JOIN таблицы значений с условием Справочник='МойСправочник' и КодВТаблице=КодЗначения. Притом это требуется в основном для отображения списочных форм и отчетов. А в формах используются контролы, которые сами уже умеют вытаскивать нужные данные.
kasik Любитель естественных ключей детектед. Опять же ищите по сочетанию "естественные ключи vs суррогаты"В свое время был апологетом суррогатных ключей. Пока не пришлось заняться с тиражируемыми системами :)
Если логика приложения плотно завязана на значения справочника, то код
Код: sql
1.
2.
3.
4.
if Code='PREPARE' 
   Prepare()
else if Code='DONE'
   Done()

читаем и сопровождаем. С суррогатами такой фокус не прокатывает.

А ФК, кстати, снижают производительность поэтому, например, иметь таблицу в нагруженной OLTP-системе со 100 справочными полями для массовой вставки нецелесообразно. А без ФК я смысла в 1000 таблиц справочника не вижу вообще.
Я не являюсь противником классического подхода с организацией в виде таблиц, но являюсь противником бездумного следования какой-то одной идеологии.
...
Рейтинг: 0 / 0
Проектирование атомарных справочников...
    #38530048
Фотография Infernal V. Raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kasikВообщем все слилось в холивар, который я начал!
Так?Да вроде нет. Иначе бы тут уже 100 страниц было бы.
kasikЗначит и тот и другой вариант "хорош", и отталкиваемся лишь от архитектора, который несет ответственность за все в целом. Конечно это задача архитектора.
Насчет этой задачи могу порекомендовать осмотрительнее подходить к выбору способа реализации каждого справочника (таблица/перечисление). Если есть достаточно веские подозрения, что:
- справочник будет иерархический
- справочник будет иметь доп.значения помимо код/значение
- объем справочника не влазит в комбобокс :) (скажем у меня больше 100 значений вызовут подозрение)

то стоит реализовывать справочник в виде таблицы. В ином случае можно загнать в справочник перечислений.
...
Рейтинг: 0 / 0
Проектирование атомарных справочников...
    #38530049
kasik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В моем случаи, получается, какой способ использовать что бы не было "бездумного следования какой-то одной идеологии"!?
...
Рейтинг: 0 / 0
Проектирование атомарных справочников...
    #38530053
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Infernal V. Raven На мой взгляд слишком категоричное утверждение. Приведите нормальный реальный измеримый выигрыш. Хоть один. Замена нормальных физических таблиц логическими (размазанными по приложению запросами или вьюхами) ну никак не тянет на выигрыш. Зачем делать за СУБД ее работу?

Infernal V. Raven А в формах используются контролы, которые сами уже умеют вытаскивать нужные данные.Сами это как? Я бы предположил, что прежде чем контролы сами будут вытаскивать данные им надо либо указать на таблицу/вьюху или написать запрос.

Infernal V. Raven С суррогатами такой фокус не прокатывает.Одно другому не мешает. У значения справочника есть айди для ссылочной целостности (и только для ссылочной целостности), есть код или мнемокод для вашего примера, есть наименование для чтения пользователем, может быть длинное описание для вывода отчета.

Infernal V. Raven А ФК, кстати, снижают производительность поэтому, например, иметь таблицу в нагруженной OLTP-системе со 100 справочными полями для массовой вставки нецелесообразно.Дайте определение массовой вставки. Для OLTP-системы заливка данных разовое мероприятие. А для поштучных вставок ФК - самый дешевый способ обеспечить целостность.

Infernal V. Raven но являюсь противником бездумного следования какой-то одной идеологии. Согласен, но данной сферической задачи в вакууме начинать надо с правильного подхода.
...
Рейтинг: 0 / 0
25 сообщений из 325, страница 1 из 13
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Проектирование атомарных справочников...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]