|
|
|
Проектирование атомарных справочников...
|
|||
|---|---|---|---|
|
#18+
kasik атомарный справочник статусов заявок Поясни, пожалуйста, что такое "атомарный справочник" ? Справочник атомарных весов химических элементов таблицы Менделеева ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 18:55 |
|
||
|
Проектирование атомарных справочников...
|
|||
|---|---|---|---|
|
#18+
Все эти справочники "согнать" в один общий справочник (аттрибуты: имя справочника, значение(аббревиатура), описание(то что пользователь будет видеть в приложении) ), в котором будет поле "имя справочника", и по фильтру на котором я и получю нужный list of values. Ну, что ж, так иногда делают, особенно это полезно, когда таких простейших справочников очень много. Типа 200. Тогда это очень выгодно. То есть никакой физической связи со справочником заявок не будет, а вся логика будет перенесена на уровень приложения, где я буду отслеживать из какого справочника мне нужен именно в этой таблице взять значение. Физическая связь может и присутствовать, другое дело, ты не сможешь средствами СУБД (констрейнтов) контролировать, что в нужную таблицу попали значения именно из нужного справочника. Это не страшно, это можно контролировать логикой приложения, реализованной в триггерах, хранимых процедурах или каком-то ещё коде. Не обязательно это контролировать в самой БД. Ладно я выбери из списка в приложении именно тот справочник и выберу в нем значение, и что дальше? что я вставлю в status таблицы заявок, код из общей таблицы справочников? А если какой нибудь справочник надо поменять, и не изменить значение, а добавить, то все записи сдвинутся, и коды поменяются(рассматриваю вариант с полным пересозданием) Это с какого перепугу ? PK никогда не меняются. и тогда вообще будет охинея. А если вставлять не код, а как предлагает руководитель "значение", и типа это "значение" должно быть уникально во всех справочниках, но может же быть ситуация, что в разных справочниках может быть одно и тоже буквенное сочетание, но разное по описанию. То есть вставив это "значение", я не смогу произвести обратную трансформацию в display name статуса, так как мне возратится не одна запись а несколько из глобального справочника. Что бы обойти это, то нужно еще накладывать большую логику на приложение, что бы мне искать в глоб справочнике значение по определенному справочнику в зависимости от текущего состояния приложения. Еще выход - что бы сослаться уникально, то нужно использовать связку имя "справочника-значение" и хранить ее в id_status таблицы заявки. Соответственно здесь получается никакой физ. связи между мастер таблицей и атомарным справочником, и если поменяется что то в глобальной таблице это не приведет в изменении в ней. Всё это я нифига не понял. Надо жестко все контролировать на уровне приложения. Да, надо. Ничего страшного. И главное -- её надо контролировать и так, и так. Т.е. по-любому эта логика должна быть, а в БД или на среднем слое должна быть ещё одна такая же. Увы. Но это как то получается все оч толсто!!! Жызнь ваапще сложная штука... Но руководитель настаивает что это бэст практишь и вообще все отходят от форин ключей, и хранят сами значения, а не ссылки на них ввиде идентификатора, как по науке. Тут руководитель не совсем прав. FK, если их можно сделать, очень хорошая штука. Но как правило это -- 20 подстраховка в самом-самом нижнем уровне. Когда всё остальное уже отработало и 3 раза всё перепроверило. Но это не значит, что их не нужно делать, НУЖНО. И особенно они хороши, когда данные правят программисты руками -- там уже 3 перепроверок нет, и остаются одни констрейнты. Итого. ЕДиний общий справочник вместо 200 одинаковых типа "ключ-значение" -- это благо. FK при этом НАДО создавать. ПОтому что любые декларативные констрейнты в БД -- тоже благо (если очень не мешают производительности). FK при этом теряет немного свою мощность, так как не может проверить, что дочерняя сущность ссылкается на значение справочника именно нужного типа. Поэтому, если можно, лучше проверять это дополнительно, в коде процедур, триггерами или на среднем слое в сервере приложений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 19:14 |
|
||
|
Проектирование атомарных справочников...
|
|||
|---|---|---|---|
|
#18+
SERG1257Приведите нормальный реальный измеримый выигрыш. Хоть один. Замена нормальных физических таблиц логическими (размазанными по приложению запросами или вьюхами) ну никак не тянет на выигрыш. Зачем делать за СУБД ее работу?Какую работу делает таблица перечислений? Таблица перечислений и много таблиц со справочными значениями не делают никакой работы. Они хранят данные. Какие количественные характеристики вы хотите рассматривать, объем? А в плане удобства использования - это зависит от того, кто/как использует вариант работы Таблица/перечисление. Криворуко можно сделать в любом случае. SERG1257Сами это как? Я бы предположил, что прежде чем контролы сами будут вытаскивать данные им надо либо указать на таблицу/вьюху или написать запрос.Контролу указывается название справочника. Запросы определяются в базовом классе контрола и название справочника передается параметром. SERG1257Одно другому не мешает. У значения справочника есть айди для ссылочной целостности (и только для ссылочной целостности), есть код или мнемокод для вашего примера, есть наименование для чтения пользователем, может быть длинное описание для вывода отчета.Ок. Предположим есть таблица транзакций FT_ID - number FT_STATUS_ID - number(FK) Ссылочная целостность присутствует. Тогда таблица статусов с суррогатом будет такой FT_STATUS_ID - number - суррогат USER_STATUS_ID - это мненмокод? STATUS_NAME - название Все правильно? Тогда чтобы получить читаемый код (как я писал выше) нужно писать запросы с присоединением справочника. Не проблема конечно, но лишний раз мне это делать было всегда лень. Также как и иметь PK+уникальный индекс для пользовательского кода на справочнике. В случае хранения натурального ключа - код сразу известен. SERG1257Дайте определение массовой вставки. Для OLTP-системы заливка данных разовое мероприятие.Да ладно! Есть такой класс задач - биллинг, есть непрерывный, есть периодический. И в том, и в другом массовая обработка данных постоянное явление и зачастую критичное по времени, поэтому за производительность всегда борются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 19:14 |
|
||
|
Проектирование атомарных справочников...
|
|||
|---|---|---|---|
|
#18+
SERG1257Приведите нормальный реальный измеримый выигрыш. Хоть один. Замена нормальных физических таблиц логическими (размазанными по приложению запросами или вьюхами) ну никак не тянет на выигрыш. Зачем делать за СУБД ее работу? Например затем, что в этом случае добавление нового справочника не требует написания новых запросов и/или использования динамического SQL. Не требует создания новых форм его редактирования/наполнения/выбора. Не требует права на CREATE TABLE и потому может осуществляться даже ограниченным пользователем. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 19:17 |
|
||
|
Проектирование атомарных справочников...
|
|||
|---|---|---|---|
|
#18+
kasikИспользовать глобальный справочник нужно с обычными идентификаторами через сиквенс, а добавлять новые последовательно, что бы не было сдвигов. И он будет условно-статичный в части статичных, неменяемых, идентификаторов. Пока так вижу выход... Вообще в таких случаях лучше всего использовать идентификаторы в виде символьных шифров, идентифицирующих экземпляры сущностей. gender ('M', 'F') marital_status( 'SNGL', 'MR', 'WD', 'DV' ) и так далее. Но ежели вы уж используете числовые идентификаторы, то какого ж фига вы их каждый раз перенумеровываете ? Не, если каждый раз БД с нуля генерируется, то можно, но если нет -- менять их нельзя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 19:20 |
|
||
|
Проектирование атомарных справочников...
|
|||
|---|---|---|---|
|
#18+
А так ли это хорошо, что любой пользователь (имеющий доступ к справочной таблице) может просматривать содержимое всех справочников ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 19:21 |
|
||
|
Проектирование атомарных справочников...
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovSERG1257Приведите нормальный реальный измеримый выигрыш. Хоть один. Замена нормальных физических таблиц логическими (размазанными по приложению запросами или вьюхами) ну никак не тянет на выигрыш. Зачем делать за СУБД ее работу? Например затем, что в этом случае добавление нового справочника не требует написания новых запросов и/или использования динамического SQL. Не требует создания новых форм его редактирования/наполнения/выбора. Не требует права на CREATE TABLE и потому может осуществляться даже ограниченным пользователем. Ещё "очень выгодно" такое, если надо находу добавить новый справочник. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 19:22 |
|
||
|
Проектирование атомарных справочников...
|
|||
|---|---|---|---|
|
#18+
Dmitry EliseevА так ли это хорошо, что любой пользователь (имеющий доступ к справочной таблице) может просматривать содержимое всех справочников ?Обычно туда загоняются такие значения, которые не требуют ограничения видимости. Но можно и прикрутить конечно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 19:27 |
|
||
|
Проектирование атомарных справочников...
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Например затем, что в этом случае добавление нового справочника не требует написания новых запросовАга а select id,code,descr from universal_dict where dict_type='Новый справочник' само появится? В любом случае это будет генератор. А ему не пофиг ли сгенерировать select id,code,descr from 'Новый справочник'. Dimitry Sibiryakov Не требует создания новых форм его редактирования/наполнения/выбораТо бишь формы тоже с неба появляются. Или вы не умеете одну и ту же форму натравливать на разные таблицы с одинаковыми именами полей? авторНе требует права на CREATE TABLE и потому может осуществляться даже ограниченным пользователем. Ещё "очень выгодно" такое, если надо находу добавить новый справочник. Вот чисто из любопытсва приведите пример - маша шла шла шла и справочник нашла. Или все же это патч на базу - для создания новых объектов плюс патч на приложение что бы уметь работать с новыми объектами. Dmitry Eliseev А так ли это хорошо, что любой пользователь (имеющий доступ к справочной таблице) может просматривать содержимое всех справочников ? И я о том. Плюс все другие недостатки типа заблокировали один справочник (да я знаю что он крошечный и это выдуманный пример), а страдают все. Плюс в случае бага (тоже выдуманный пример) в коде проверки, То бишь шила в мешке не утаишь. Отказы от физических таблиц просто перетягивает одеяло в сторону приложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 19:44 |
|
||
|
Проектирование атомарных справочников...
|
|||
|---|---|---|---|
|
#18+
SERG1257Ага а select id,code,descr from universal_dict where dict_type='Новый справочник' само появится? Когда-нибудь слышали про параметризованные запросы?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 19:51 |
|
||
|
Проектирование атомарных справочников...
|
|||
|---|---|---|---|
|
#18+
SERG1257Плюс в случае бага (тоже выдуманный пример) в коде проверки,В случае бага или отключения плохие данные могут попасть в базу, и включение проверки их никак не выявит, в то время как констрейнт просто не включится. То бишь опять надо делать лишний шаг. Infernal V. Raven Какую работу делает таблица перечислений? Таблица перечислений и много таблиц со справочными значениями не делают никакой работы. Работу делает программер добавляя кусочки кода туда и сюда. Вместо объявления констрейна. Dimitry Sibiryakov Когда-нибудь слышали про параметризованные запросы?Слышал. И какое это имеет отношение к обсуждению. И в том и в другом случае надо писать код (больше меньше не суть важно) само ничего не появляется. Экономия в написании кода - копейки по сравнению со временем жизни приложения. Конечно программер считает иначе, ибо для него все заканчивается внедрением. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 20:03 |
|
||
|
Проектирование атомарных справочников...
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, "вы когда нть слышали про динамический скл" ? /* к которому сводится использования 100500 разных справочников (содержазих даже по разному именованные поля), описанных единожды в некоем метасправочнике ? что, однако не мешает вешать на всё это богатство самые взаправдашние ФКеи? или вы у нас автор недосубд, не умеющей их, фкеи, правильно готовить ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 20:12 |
|
||
|
Проектирование атомарных справочников...
|
|||
|---|---|---|---|
|
#18+
бггг недосубд, не умеющей их, фкеи, правильно готовить ?Давайте все же на личности не переходить. Я говорю же универсальный справочник, это как детская болезнь. Да так тоже можно, но нужно ли. Я перебирал аргументы и не нашел ни одного довода за, при возможных (пусть и маловероятных) доводов против. Стало быть, надо поступать правильно, хотя это скучно и банально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 20:38 |
|
||
|
Проектирование атомарных справочников...
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovНапример затем, что в этом случае добавление нового справочника не требует написания новых запросов и/или использования динамического SQL. Не требует создания новых форм его редактирования/наполнения/выбора. Не требует права на CREATE TABLE и потому может осуществляться даже ограниченным пользователем. Ну вот не понимаю, какая польза в добавлении такого "нового справочника" как таковом. Как минимум, еще надо добавить поле в master-таблицу, где будет храниться новоявленный признак. На master-формы редактирования положить lookup, запрограммированный на обращение к новоявленому справочнику. В формах параметров отчетов сделать то же. Конечно, возможен вариант, когда в master-таблице все это тоже хранится в EAV, а формы динамически конфигурируются метаданными, так что система подхватит мысль пользователя на лету, и все заработает само. Но это далеко выходит за рамки топика. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 20:54 |
|
||
|
Проектирование атомарных справочников...
|
|||
|---|---|---|---|
|
#18+
kasik, Если начальник, то это совсем не значит, что он идиот. Просто у вас с ним кругозор принятия решений разный. Вы по своему статусу должны быть больше тактиком, а он по своему статусу должен быть больше стратегом. И он совсем не обязан посвящать Вас в свои планы. Да, с точки зрения разработки небольшого приложения для одного заказчика, с пригоршней справочников Ваша схема академична и абсолютно верна. Нормализация, внешние ключи и т.д. И никто Вас не упрекнёт, что Вы плохо спроектировали БД. А теперь представьте, что Ваш начальник на подкорке держит планы отработать приложение в локалке, а затем уйти в WEB, на большие нагрузки? Тут уже другой коленкор. И начальник со своим нарушением нормализации предстаёт правильным перцем. Что по мне - для больших справочников с большим количеством атрибутов использую классическую схему, для мелочёвки вида KEY-VALUE использую один древовидный справочник. Плюсы в том, что с этими справочниками не надо заморачиваться с правами, не болит голова с формами. При создании нового приложения параллельно с разработкой отдаёшь "рыбу" заказчику, что-бы кто-то из их специалистов создал и заполнил нужные им справочники. При желании автоматом из такого дерева можно нагенерировать таблиц в классике. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 21:06 |
|
||
|
Проектирование атомарных справочников...
|
|||
|---|---|---|---|
|
#18+
Cane Cat FisherНу вот не понимаю, какая польза в добавлении такого "нового справочника" как таковом. Как минимум, еще надо добавить поле в master-таблицу, где будет храниться новоявленный признак. Возьмём, например, предприятие. У него есть туева хуча классифицирующих атрибутов: ОКАТО, ОКПО, ОКДП и т.д. и т.п. И постоянно Большой Брат норовит ввести какую-нибудь новую хрень. Можно на каждый его чих курочить структуру БД и тем обеспечить себя работой на всю оставшуюся жизнь. Или связать таблицу предприятий с универсальным справочником классификаций связью M:N. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 21:06 |
|
||
|
Проектирование атомарных справочников...
|
|||
|---|---|---|---|
|
#18+
zeon11 а затем уйти в WEB, на большие нагрузки? Тут уже другой коленкорИ какой коленкор? Чем смешивание сущностей поможет при больших нагрузках. Или вы не умеете управлять автомобилем - садитесь на танк, это будут уже не ваши проблемы. zeon11 И начальник со своим нарушением нормализации предстаёт правильным перцем.И причем здесь нарушение нормализации вообще. zeon11 Плюсы в том, что с этими справочниками не надо заморачиваться с правамиА зачем тогда вообще заморачиватся с правами - работай под рутом и никаких проблем. zeon11 При желании автоматом из такого дерева можно нагенерировать таблиц в классике. А почему их сразу не нагенерировать? Еще раз повторю - никто не утверждал, что правила нарушать нельзя. Но я утверждаю, что сначала надо делать все правильно, и только потом, отдавая себе отчет за последствия их нарушать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 21:23 |
|
||
|
Проектирование атомарных справочников...
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Можно на каждый его чих курочить структуру БД и тем обеспечить себя работой на всю оставшуюся жизнь.Что-то мне кажется что рассовывание кода по приложению, триггерам и т.п. больше похоже на обеспечить работой на всю оставшуюся жизнь, чем скучный FK. Можно еще базу в EAV хранить, чтобы уж совсем никто без программиста не разобрался. С точки зрения job security вы совершенно правы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 21:33 |
|
||
|
Проектирование атомарных справочников...
|
|||
|---|---|---|---|
|
#18+
SERG1257Что-то мне кажется что рассовывание кода по приложению, триггерам и т.п. больше похоже на обеспечить работой на всю оставшуюся жизнь, чем скучный FK. Уж не знаю, что ты там себе нафантазировал, но код для работы с универсальными справочниками пишется ровно один раз. Дальше он просто работает. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 21:41 |
|
||
|
Проектирование атомарных справочников...
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Уж не знаю, что ты там себе нафантазировал, но код для работы с универсальными справочниками пишется ровно один разДа ну. И вызывается тоже один раз? Или вызов кода, кодом не является. И проверки, что введенное значение является корректным тоже сами делаются. Или в базу кроме твоего приложения никто писать не имеет права? И если я вдруг вынужден отключить эту проверку (испугался коленкора) что проще - отключить fk или просить программиста полазить по коду? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 21:49 |
|
||
|
Проектирование атомарных справочников...
|
|||
|---|---|---|---|
|
#18+
SERG1257И проверки, что введенное значение является корректным тоже сами делаются. Или в базу кроме твоего приложения никто писать не имеет права? Ты не поверишь, но FK технически не даёт возможности ввести некорректное значение. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 21:55 |
|
||
|
Проектирование атомарных справочников...
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Ты не поверишь, но FK технически не даёт возможности ввести некорректное значениеА у ТС универсальный справочник, так что технически там может быть любое универсальное значение. И обнаружится это только когда строка отсечется джойном. Но ведь это же будут проблемы не программиста, а админа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 22:01 |
|
||
|
Проектирование атомарных справочников...
|
|||
|---|---|---|---|
|
#18+
SERG1257, Ни для кого не секрет, что выборка из плоской таблицы будет быстрее. Отсюда следует, что если Вы упёрлись в потолок , а вам нужна скорость - вы будете делать из двух таблиц одну, а значит произойдёт процесс денормализации. Начальник и предлагает денормализацию: автор А если вставлять не код, а как предлагает руководитель "значение",..... По поводу прав - у ТС справочник статусов заявок (открыта, закрыта, в процессе и т.п.) Какой смысл ограничивать кого-либо в правах на чтение на этот справочник? Пусть все читают, кому не лень - меньше проблем у ТС. Вот на изменение справочника - другое дело, только администратору приложения. авторЕще раз повторю - никто не утверждал, что правила нарушать нельзя. Но я утверждаю, что сначала надо делать все правильно, и только потом, отдавая себе отчет за последствия их нарушать. Золотые слова, я то-же, как и Вы, предпочитаю сначала всё сделать правильно, а потом нарушить правила. Только никто не запрещает "сделать всё правильно" ментально, а потом нарушить правила уже ручками. Так просто быстрее получается. По поводу простых справочников в одном месте (у меня в дереве) - их просто удобно видеть в одном месте, меньше ошибок ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 22:02 |
|
||
|
Проектирование атомарных справочников...
|
|||
|---|---|---|---|
|
#18+
SERG1257Dimitry Sibiryakov Ты не поверишь, но FK технически не даёт возможности ввести некорректное значениеА у ТС универсальный справочник, так что технически там может быть любое универсальное значение. И обнаружится это только когда строка отсечется джойном. Но ведь это же будут проблемы не программиста, а админа. Такие справочники, как у ТС создаются один раз при внедрении программы. А потом в них никто ничего не пишет. Или пишет, но одну запись раз в пять лет, т.к. кто-то в Думе за что-то проголосовал. Эти справочники работают как поставщики контекста в таблицах и комбобоксах, и если всё сделано правильно, то в таблицу KEY из другого справочника никогда не попадёт, а значит и проблем с JOIN'ном никогда не будет. И у админа проблем не будет при смене обстоятельств - зайдёт раз в пять лет в справочник и добавит новое значение и ключ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 22:16 |
|
||
|
Проектирование атомарных справочников...
|
|||
|---|---|---|---|
|
#18+
zeon11 Такие справочники, как у ТС создаются один раз при внедрении программы. А потом в них никто ничего не пишет. Или пишет, но одну запись раз в пять лет, т.к. кто-то в Думе за что-то проголосовалА раз так то почему бы не сделать все правильно? Нахрена выеживатся. Ну не вижу я выгоды для объединения. zeon11 Начальник и предлагает денормализациюИ какую нормальную форму нарушает создание универсального справочника. А значение это использование естественного ключа. Теплое совсем не обязательно мягкое. zeon11 Вот на изменение справочника - другое дело, только администратору приложения.Поскольку физическая таблица одна, то права на изменение всех виртуальных таблиц одновременно. "Все или ничего" или рулить из приложения. Кто там мечтал боялся работы на всю жизнь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 22:33 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=38530079&tid=1540946]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
159ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 17ms |
| total: | 276ms |

| 0 / 0 |

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