|
|
|
Динамическое добавление справочников
|
|||
|---|---|---|---|
|
#18+
Вообщем суть вопроса. Есть готовый небольшой проект, который выводит несколько отчетов. Но у каждого клиента отчет немного отличается. Начальство хочет задумать какой-нибудь механизм, позволяющий на месте внедрять новые справочники и привязывать их к отчету. Причем формы должны подхватывать эти справочники и позволять вводить значения. Очень слабо представляю как это можно реализовать. Динамически добавлять таблицы или столбцы мне кажется утопией. Но и чтобы добавить колонку в отчете не очень хочется каждый раз перекомпилировать проект. Как можно поступить в этом случае? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2009, 02:26 |
|
||
|
Динамическое добавление справочников
|
|||
|---|---|---|---|
|
#18+
daunito, Кхе..Кхе. Ну можно объединить все справочники по типу DOMAINS->DOMAIN ITEMS и свалить все справочники туда. У нас так было в одной системе. Или объединить их в похожую структуру на логическом уровне через UNION ALL и использовать полученную вьюшку вместо прямого доступа к их таблицам. Вопщем идей еще много. Regards. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2009, 02:37 |
|
||
|
Динамическое добавление справочников
|
|||
|---|---|---|---|
|
#18+
вот где то на этом форуме прочитал раньше : Отдельная база для общих таблиц (например, справочников), процедур, функций - вполне нормальное решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2009, 09:47 |
|
||
|
Динамическое добавление справочников
|
|||
|---|---|---|---|
|
#18+
daunito, В чем конкретно сложность перекомпиляции проекта? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2009, 10:11 |
|
||
|
Динамическое добавление справочников
|
|||
|---|---|---|---|
|
#18+
Сделать таблицу-контейнер справочников ID, DictID, TxtField...... где DictID - код справочника, а ID - код записи в справочнике 1 1 Коля 2 1 Петя 3 1 Вася 1 2 Дворник 2 2 Директор 3 2 Бухгалтер 1=Пользователи 2=Должности ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2009, 10:53 |
|
||
|
Динамическое добавление справочников
|
|||
|---|---|---|---|
|
#18+
nosovвот где то на этом форуме прочитал раньше : Отдельная база для общих таблиц (например, справочников), процедур, функций - вполне нормальное решение.А какая СУБД поддерживает FK между таблицами в разных БД? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2009, 15:03 |
|
||
|
Динамическое добавление справочников
|
|||
|---|---|---|---|
|
#18+
2 Senya_L записываю чужие полезные (на мой взгляд) мысли из этого форума в тхт файл. полезность и правильность их не проверяю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2009, 15:37 |
|
||
|
Динамическое добавление справочников
|
|||
|---|---|---|---|
|
#18+
> Как можно поступить в этом случае? Справочники не имеют никакого отношения к задаче. Займитесь редизайном. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2009, 16:16 |
|
||
|
Динамическое добавление справочников
|
|||
|---|---|---|---|
|
#18+
дЕлается все просто Пример. Есть узлы классификатора "Составное изделие", который содержит "Сборка", "Комплект", "Комплекс." При запуске система генерирует виртуальную структуру для "Составное изделие". Отчеты на входе имеют эту виртуальную структуру. Пользователь может ввести скоко угодно новых типов и добавить их в узел "Составное изделие". Отчеты старые не меняются, а новых моджно добваить скоко угодно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2009, 18:32 |
|
||
|
Динамическое добавление справочников
|
|||
|---|---|---|---|
|
#18+
По поводу перекомпиляции, если каждому клиенту подгонять структуру базы под его нужды, то в конечном итоге получится куча разных приложений. Для поддержки это полный аут. Мысль слить все справочники в две таблицы у меня была, только очень много заморочек. Например, как быть с разными типами данных? Потом, как вообще научить формы цеплять новые справочники? Динамически добавлять контролы и обработчики? Например, в отчете по продажам один из наших клиентов хочет видеть еще и девичью фамилию менеджеров женского пола. Надо в форме редактирования менеджера добавить поле "девичья фамилия" и потом выводить его в отчете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2009, 18:52 |
|
||
|
Динамическое добавление справочников
|
|||
|---|---|---|---|
|
#18+
daunito, Элементарно, Ватсон. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2009, 18:57 |
|
||
|
Динамическое добавление справочников
|
|||
|---|---|---|---|
|
#18+
2 daunito Очень похоже, что вам не нужна куча новых справочников, а надо иметь один дополнительный (атрибуты) - в котором, как правило, три столбца: 1. код объекта; 2. название параметра (строка); 3. значение параметра (строка). Таким образом вы добавляете новый параметр не в виде столбца (или таблицы), а как новую запись в существующую таблицу атрибутов. С типами не заморачивайтесь - строковый тип покрывает все (вы ведь не собираетесь проводить с ними математические операции. Даже если собираетесь, то добавьте еще поле с типом параметра). Сахават Юсифов дал вам в последнем посте наглядный пример как такая штука работает. Для обострения восприятия добавлю еще пример: Obj_IDParamNameParamValue1телефон123 456 78901имяГлафира1рост1711бюст941талия612наименованиеквадратное отверстие2позицияприклеено к верхнему днищу2описаниетреугольной формы диаметром 3х4 Успехов! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2009, 23:22 |
|
||
|
Динамическое добавление справочников
|
|||
|---|---|---|---|
|
#18+
daunitoПо поводу перекомпиляции, если каждому клиенту подгонять структуру базы под его нужды, то в конечном итоге получится куча разных приложений. Для поддержки это полный аут. А что, монстровидную систему с индивидуальными информационными схемами на каждого клиента поддерживать проще? Вообще говоря, суть проблем, которые нужно помнить при сопровождении, "количество поддерживающей информации", образно говоря, в обеих случаях примерно одинаково. Только в первом случае оно выливается в стандартные процедуры с помощью стандартных инструментов, а во втором - в нестандартные процедуры над все более усложняющимся продуктом с неясным исходом. Вот и сравните трудоемкости. И еще - поверьте, динамически пристегивающимися голыми справочниками Вы не удовлетворитесь, и никакой реальной задачи не покроете - рано или поздно к ним потребуется столь же динамически пристегивающаяся, пусть крохотная, но бизнес-логика, опять же индивидуальная для каждого клиента. Что тогда будете делать? Судя по постановке задачи, отличия между клиентами незначительны. Подумайте над объединением их всех в единую "накопительную" версию (надеюсь, требования клиентов не противоречат прямо друг другу?) по традиционной технологии, а если кому что категорически не надо - лишние элементы интерфейса спрятать нехитрыми индивидуальными настройками, хоть в ini-файлах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2009, 23:48 |
|
||
|
Динамическое добавление справочников
|
|||
|---|---|---|---|
|
#18+
Cane Cat FisherПодумайте над объединением их всех в единую "накопительную" версию (надеюсь, требования клиентов не противоречат прямо друг другу?) по традиционной технологии, а если кому что категорически не надо - лишние элементы интерфейса спрятать нехитрыми индивидуальными настройками +1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2009, 23:52 |
|
||
|
Динамическое добавление справочников
|
|||
|---|---|---|---|
|
#18+
Senya_LА какая СУБД поддерживает FK между таблицами в разных БД? А какая СУБД "поддерживает" реализацию ссылочной целостности только через FK? ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2009, 14:34 |
|
||
|
Динамическое добавление справочников
|
|||
|---|---|---|---|
|
#18+
daunitoВообщем суть вопроса. Есть готовый небольшой проект, который выводит несколько отчетов. Но у каждого клиента отчет немного отличается. Начальство хочет задумать какой-нибудь механизм, позволяющий на месте внедрять новые справочники и привязывать их к отчету. Причем формы должны подхватывать эти справочники и позволять вводить значения. Очень слабо представляю как это можно реализовать. Динамически добавлять таблицы или столбцы мне кажется утопией. Но и чтобы добавить колонку в отчете не очень хочется каждый раз перекомпилировать проект. Как можно поступить в этом случае? А какая у вас отчетная система? Как она работает? Как выглядит? По поводу дополнительных полей. Делайте все через правило "один справочник одна таблица". Измените формы, что бы они динамически строились. В системных таблицах можно узнать информацию о таблице и ее полях, соответственно можно на этих данных построить запрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2009, 15:19 |
|
||
|
Динамическое добавление справочников
|
|||
|---|---|---|---|
|
#18+
Сергей ВаскецовSenya_LА какая СУБД поддерживает FK между таблицами в разных БД? А какая СУБД "поддерживает" реализацию ссылочной целостности только через FK? ;)А в каких СУБД поддержка FK на триггерах считается надежной? ;) ЗЫ. Хотя есть мнение, что блокировочники в этом отношении надежней версионников, но не уверен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2009, 17:01 |
|
||
|
Динамическое добавление справочников
|
|||
|---|---|---|---|
|
#18+
Senya_LА в каких СУБД поддержка FK на триггерах считается надежной? ;) Хм. Триггеры или работают, или нет. Я бы еще понял вопросы, связанные с правами на объекты между 2-мя БД, но насчет надежности решения в принципе? В любом случае, можно и в рамках одной БД все сделать, рецептов тут много. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2009, 17:16 |
|
||
|
Динамическое добавление справочников
|
|||
|---|---|---|---|
|
#18+
Делайте все через правило "один справочник одна таблица"Это стеб такой ? В крупных корп. системах кол-во справочников (большинство - мелкие) может быть много сотен. Лепить кучу одинаковых таблиц с двумя, тремя полями и кучей однотипной логики ?????? ЖЖОТЕ ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2009, 18:39 |
|
||
|
Динамическое добавление справочников
|
|||
|---|---|---|---|
|
#18+
авторЭто стеб такой ? В крупных корп. системах кол-во справочников (большинство - мелкие) может быть много сотен. Лепить кучу одинаковых таблиц с двумя, тремя полями и кучей однотипной логики ?????? ЖЖОТЕ ! В таком случае, монстры ERP отжигают свои горшки не для крупных предприятий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2009, 19:09 |
|
||
|
Динамическое добавление справочников
|
|||
|---|---|---|---|
|
#18+
SeVaВ таком случае, монстры ERP отжигают свои горшки не для крупных предприятий.У монстров еще немало других, противоречащих нормальной логике вещей. Чаще всего связанных с обратной совместимостью и с гибкостью для портирования на разные СУБД. Деление на крупные/некрупные определяются только ценой ERP, но никак не функциональностью и производительностью, ИМХО. С точки зрения количества нюансов учета в крупной и некрупной компании отличия несущественные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2009, 10:20 |
|
||
|
Динамическое добавление справочников
|
|||
|---|---|---|---|
|
#18+
LSVЭто стеб такой ? В крупных корп. системах кол-во справочников (большинство - мелкие) может быть много сотен. Лепить кучу одинаковых таблиц с двумя, тремя полями и кучей однотипной логики ?????? ЖЖОТЕ ! И что? Хоть тысяча справочников. Во первых. Есть такое понятие ограничение целостности БД, как вы будете его обеспечивать, если у вас будет одна таблица на все справочники? Кодом? Триггерами? Лишняя работа и вероятность появления ошибки. Тоже самое касается безопасности, как вы будете ограничивать доступ до справочников. Во вторых не справочники одинаковые, у кого то используются суррогатные ключи, у кого то фиксированные коды, не говоря уже о структуре справочника (количество и тип полей). Как вы это все запишите в одну таблицу? А есть же еще и древовидные справочники. В третьих все почему то бояться лепить кучу форм для работы со справочником, мол на каждый справочник придется лепить форму. Решение простое. Создайте динамическую форму, которая читая метаданные сама строит котролы. А если решение на дельфи там вообще только запросы достаточно генерировать. В четвертых вы подумали о производительности, о тюнинге БД, по вашей логике 100 справочников допустим в среднем по 20 значений в справочнике итого для того что бы найти нужное значение нужно перелопатить 2000 записей, хотя нужно было всего 20. У вас не будет возможности раскинуть справочники по разным табличным пространствам, что бы часто используемым выделялось бы больше ресурсов, например выделить побольше буффер пул. И еще куча нюансов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2009, 13:47 |
|
||
|
Динамическое добавление справочников
|
|||
|---|---|---|---|
|
#18+
Во первых. Есть такое понятие ограничение целостности БД, как вы будете его обеспечивать, если у вас будет одна таблица на все справочники? Кодом?Вы будете смеяться, но скажу по секрету, что практически все ERP не используют ссыл.целост. на стороне СУБД. :) Триггеров тоже как правило ниодного. Все проверки или в ХП или прямых запросах с клиента. Дело в том, что проверка целостности данных не ограничивается только запретом удаления при наличии ссылки. Делать же несколько принципиально разных механизмов сложно и глупо. Например у нас проверка это некая ХП иногда с сотнями строк нетривиального кода. Для сотен справочников из двух полей на 5-100записей делать отдельные таблицы ? Ну делайте, если Вам не лень ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2009, 15:47 |
|
||
|
Динамическое добавление справочников
|
|||
|---|---|---|---|
|
#18+
LSV Дело в том, что проверка целостности данных не ограничивается только запретом удаления при наличии ссылки. +1. Забывают иногда простую вещь... даже изменение данных в так называемых справочниках, не должно нарушать представление ранее учтенных фактов в системе. Именно поэтому, во многих ERP видна денормализация, а справочник используется только для выбора "правильного" значения в момент регистрации факта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2009, 15:55 |
|
||
|
Динамическое добавление справочников
|
|||
|---|---|---|---|
|
#18+
Иногда забывают еще одну простую вещь - не усложняй себе и другим жизнь на ровном месте,чем проще,тем жизнеспособней ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2009, 16:48 |
|
||
|
Динамическое добавление справочников
|
|||
|---|---|---|---|
|
#18+
SeVaИногда забывают еще одну простую вещь - не усложняй себе и другим жизнь на ровном месте,чем проще,тем жизнеспособней именно поэтому так и делают. чтобы не усложнять и быть более жизнеспособней ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2009, 16:57 |
|
||
|
Динамическое добавление справочников
|
|||
|---|---|---|---|
|
#18+
Сергей ВаскецовSenya_LА в каких СУБД поддержка FK на триггерах считается надежной? ;) Хм. Триггеры или работают, или нет. Я бы еще понял вопросы, связанные с правами на объекты между 2-мя БД, но насчет надежности решения в принципе? В любом случае, можно и в рамках одной БД все сделать, рецептов тут много.А Вы загляните вот сюда и спросите про надежность FK на триггерах. Не между разными БД (такого в FB нет). У версионников есть свои особенности, знаете ли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2009, 00:53 |
|
||
|
Динамическое добавление справочников
|
|||
|---|---|---|---|
|
#18+
при чем здесь FK, триггеры и прочие механизмы СУБД? нить теряется... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2009, 10:30 |
|
||
|
Динамическое добавление справочников
|
|||
|---|---|---|---|
|
#18+
Нить начинает терятся,когда вводятся усложнения на ровном месте.Если одно измение может выстерлить шрапнелью по всей системе,то кому это нужно?Все эти супер справочники,мега слои во время дальнейшего развития, имеют тенденцию к разбуханию и в итоге, никто эту кашу месить не может,ее просто выбрасывают ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2009, 12:48 |
|
||
|
Динамическое добавление справочников
|
|||
|---|---|---|---|
|
#18+
SeVa, Правильно. Каждый тип сам по себе. Для указания близости типов по какому то признаку есть классификатор (И методы классифицирующего узла (наследование)). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2009, 15:17 |
|
||
|
Динамическое добавление справочников
|
|||
|---|---|---|---|
|
#18+
На самом деле критерий очень прост: при ручном программировании все в отдельных таблицах, а вот конструктор еснно использует одну таблицу под все классификаторы, поскольку они создаются динамически конечным пользователем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2009, 09:55 |
|
||
|
Динамическое добавление справочников
|
|||
|---|---|---|---|
|
#18+
> На самом деле критерий очень прост Даже еще проще: и классификаторы, и справочники - частный случай тезауруса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2009, 10:32 |
|
||
|
Динамическое добавление справочников
|
|||
|---|---|---|---|
|
#18+
LSVВсе проверки или в ХП или прямых запросах с клиента. У вас наверное и все таблицы закрыты и обращение идет только через хранимые процедуры? :) Знаем мы такое проходили. Ничего хорошего это не сулит. в большинстве своем куча лишнего кода, где в начале каждой хранимки идет проверка, а может ли пользователь что то делать. LSV Дело в том, что проверка целостности данных не ограничивается только запретом удаления при наличии ссылки. Делать же несколько принципиально разных механизмов сложно и глупо. Например у нас проверка это некая ХП иногда с сотнями строк нетривиального кода. Тут проблема в том что это проверка помогает от случайных ошибок. Проверка работает на самой таблице, что дает вам гарантию что кто то в обход вашей ХП не внесет не корректные данные. Плюс дает информацию о структуре БД, сразу можно посмотреть куда ссылается то или иное поле. Я не говорю что ваш подход не правильный, однако его тяжело соблюдать. Люди меняются, с документацией как всегда туго LSV Для сотен справочников из двух полей на 5-100записей делать отдельные таблицы ? Ну делайте, если Вам не лень ! На самом деле это только кажется что плодить кучу справочников это сложно. Написать create table не так уж и сложно. p.s. возможно мы по разному смотрим на БД, я на нее смотрю с точки зрения СУБД, а вы с точки зрения приложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2009, 12:18 |
|
||
|
Динамическое добавление справочников
|
|||
|---|---|---|---|
|
#18+
guest_20040621> На самом деле критерий очень прост Даже еще проще: и классификаторы, и справочники - частный случай тезауруса. Конечно ( учитывая их взаимосвязи) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2009, 12:44 |
|
||
|
Динамическое добавление справочников
|
|||
|---|---|---|---|
|
#18+
olzhasLSVЭто стеб такой ? В крупных корп. системах кол-во справочников (большинство - мелкие) может быть много сотен. Лепить кучу одинаковых таблиц с двумя, тремя полями и кучей однотипной логики ?????? ЖЖОТЕ ! И что? Хоть тысяча справочников. Во первых. Есть такое понятие ограничение целостности БД, как вы будете его обеспечивать, если у вас будет одна таблица на все справочники? Кодом? Триггерами? Ох уж эти ограничения целостности.... Прямо священная корова какая-то.... Да на ошибки, вызванные нарушением ограничений целостности приходится, дай бог, 5% от всех проблем. Даже на системах, где такие ограничения реализуются "никак". Все остальные проблемы - бизнес-логика... Я ставить надежность ограничения впереди надежности бизнес-логики - странно, по меньшей мере... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2009, 14:55 |
|
||
|
Динамическое добавление справочников
|
|||
|---|---|---|---|
|
#18+
Николай1, ОГраничение целостности не только для физической , но и семантической целостности.Представь -вместо "штук" в поле "едизм" "Материал"а появляется "Башкурдистан". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2009, 15:12 |
|
||
|
Динамическое добавление справочников
|
|||
|---|---|---|---|
|
#18+
Сахават ЮсифовНиколай1, ОГраничение целостности не только для физической , но и семантической целостности.Представь -вместо "штук" в поле "едизм" "Материал"а появляется "Башкурдистан". Я говорю о том, что опасность этой проблемы преувеличина. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2009, 16:59 |
|
||
|
Динамическое добавление справочников
|
|||
|---|---|---|---|
|
#18+
Николай1, да нет. смотри. надо задать отношение между элементами цеха (конкретного, элементы других цехв не могут быть тут) а у нас как обычно таблица "Цеха", "Структура цеха" (Цех, Структурный элемент цеха), "Структурный элемент цеха" (Элементы цеховые) И (Отношение) "Стр эл цеха", "Стр эл цеха" "блабла". Ка не дать возможность пользователью вводить туфту???? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2009, 23:38 |
|
||
|
Динамическое добавление справочников
|
|||
|---|---|---|---|
|
#18+
вот ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2009, 23:42 |
|
||
|
Динамическое добавление справочников
|
|||
|---|---|---|---|
|
#18+
и ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2009, 23:42 |
|
||
|
Динамическое добавление справочников
|
|||
|---|---|---|---|
|
#18+
и ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2009, 23:44 |
|
||
|
Динамическое добавление справочников
|
|||
|---|---|---|---|
|
#18+
Сахават ЮсифовКа не дать возможность пользователью вводить туфту???? Правильно запрограммировать интерфейс :) Если в проге нет ошибок, то проверка ссылочной целостности - пустая трата времени и проблемы при администрировании ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2009, 12:26 |
|
||
|
Динамическое добавление справочников
|
|||
|---|---|---|---|
|
#18+
_мод, Нет. Такой подход неприемлем. Интерфейс только отражает, а целостность должна быть до интерфейса. а не то придется на каждый чих свою форму прикручивать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2009, 15:17 |
|
||
|
|

start [/forum/topic.php?all=1&fid=32&tid=1543103]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
175ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
| others: | 224ms |
| total: | 489ms |

| 0 / 0 |
