|
|
|
Динамическое добавление справочников
|
|||
|---|---|---|---|
|
#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 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=36155560&tid=1543103]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
181ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 217ms |
| total: | 467ms |

| 0 / 0 |
