powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Непостоянное число справочников с редактируемыми числом и типом полей
25 сообщений из 92, страница 1 из 4
Непостоянное число справочников с редактируемыми числом и типом полей
    #33395430
vinniPooh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет.

Кто встречался, плиз, поделитесь опытом.

Проблема:

Заказчик хочет, чтобы было различное число справочников, в каждом какие-то поля. Пользователь хочет иметь возможность создавать/редактировать/удалять справочники и поля в них в рантайме. Разумеется, справочники дальше используются в работе и на них появляются ссылки из других таблиц. В справочнике также могут быть поля-ссылки на другие справочники.
Версионность тоже поддерживать надо (но вопрос не о версиях).
Так как это всего лишь справочники, то не обязательно, чтобы эта часть системы очень быстро работала.

Есть два варианта решения:
1. Использовать SQL DDL для создания/изменения таблиц в рантайме. Создавать таблицы, триггеры, ключи, таблицы с историей и т.д.

2. Создать общую структуру для всех справочников - таблица Справочники, таблица Поля, таблица Значения.
Запись в таблице Поля ссылается на Справочник, которому это поле принадлежит, запись в таблице Значения ссылается на Поле, которому принадлежит значение, и на Тип данных, возможно.

Если кто-то использовал это в реальном приложении, поделитесь плиз опытом по поводу производительности, простоты написания и поддержки, простоты использования.
...
Рейтинг: 0 / 0
Непостоянное число справочников с редактируемыми числом и типом полей
    #33395468
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vinniPooh....Если кто-то использовал это в реальном приложении, поделитесь плиз опытом по поводу производительности, простоты написания и поддержки, простоты использования.

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

честно говоря это не моё решение (имееться ввиду логика), но очень элегантное... с точки зрения обращений - мона выделить два этапа. Вытаскивание связей и составление сиквол запроса. Ну и вторая фаза - уже подключалась логика накачки сетевого кадра - тут уже сами данные подтягивались, но это уже другая песня.

с уважением
(круглый)
...
Рейтинг: 0 / 0
Непостоянное число справочников с редактируемыми числом и типом полей
    #33395551
vinniPooh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 kolobok0:
Спасибо,
значит работет быстро...
kolobok0
делали похожую весчь...
смысл следующий (в двух словах без конкретики)...

А вот можно с конкретикой :) - сколько времени примерно писалось это счастье, как именно формируется запрос, как поддерживаются внешние ссылки на такой справочник, какая именно структура (если это не коммерческая тайна :)) Ведь это существенно усложняет все запросы с использованием справочников.

2 All:
А кто-нибудь создавал/изменял таблицы в рантайме? Поделитесь, плиз.
Как насчет совместимости версий SQL у разных RDBMS? Может, придется реализовывать разные запросы для разных СУБД? Нерадостно это звучит...

Оба подхода имеют свои преимущества и недостатки, и я даже не знаю, что хуже :(. Каково ваше мнение по этому поводу?
Код: plaintext
1.
2.
Best regards,
             vinni.
...
Рейтинг: 0 / 0
Непостоянное число справочников с редактируемыми числом и типом полей
    #33395564
shuklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vinniPoohОба подхода имеют свои преимущества и недостатки, и я даже не знаю, что хуже :(. Каково ваше мнение по этому поводу?

Используйте ООСУБД.
http://www.membrana.ru/articles/readers/2005/09/02/200800.html
...
Рейтинг: 0 / 0
Непостоянное число справочников с редактируемыми числом и типом полей
    #33395615
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shuklin wrote:
> vinniPooh
> Оба подхода имеют свои преимущества и недостатки, и я даже не знаю, что
> хуже :(. Каково ваше мнение по этому поводу?
>
>
> Используйте ООСУБД.
> http://www.membrana.ru/articles/readers/2005/09/02/200800.html
жив, курилка....

была статья Т.Тенцера "База данных - хранилище объектов", искать в
КомпьютерПресс 8,2001

--
-------------------------
There's no silver bullet!
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Непостоянное число справочников с редактируемыми числом и типом полей
    #33395622
vinniPooh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 shuklin

Спасибо за свежую мыслю, однако по понятным причинам ООСУБД меня не устраивает. Хотя кто знает... :)
Код: plaintext
1.
2.
Best regards,
             vinni.
...
Рейтинг: 0 / 0
Непостоянное число справочников с редактируемыми числом и типом полей
    #33395626
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vinniPooh2 kolobok0:
- сколько времени примерно писалось это счастье, как именно формируется запрос, как поддерживаются внешние ссылки на такой справочник, какая именно структура (если это не коммерческая тайна :)) Ведь это существенно усложняет все запросы с использованием справочников........

сразу оговорюсь...
преследовался механизм НЕ в лёт добавлять таблицы и поля. А НЕ переделывать "поисковик" при каких-либо переделках структуры БД. а это немного рядом, я бы сказал...

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


с уважением
(круглый)
...
Рейтинг: 0 / 0
Непостоянное число справочников с редактируемыми числом и типом полей
    #33395650
vinniPooh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 locky

А что ты сам думаешь про весь этот геморрой? Может, и вправду изнасиловать заказчика и перейти на ООСБД?
Мне важны мнения людей, которые столкнулись с этим на практике.

Как-то я на заре своей программистской юности пытался реализовать наследование в РСУБД, но от этой идеи быстренько отказался - уже очень все было сложно, и время не позволяло. Хороший плюс в пользу ОО. Хотя серебряной пули нет и там ;)
Код: plaintext
1.
2.
Best regards,
             vinni.
...
Рейтинг: 0 / 0
Непостоянное число справочников с редактируемыми числом и типом полей
    #33395709
shuklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vinniPoohСпасибо за свежую мыслю, однако по понятным причинам ООСУБД меня не устраивает. Хотя кто знает... :)
В таком случае можно посмотреть EAV и LOCNET
...
Рейтинг: 0 / 0
Непостоянное число справочников с редактируемыми числом и типом полей
    #33395735
vinniPooh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 shuklin:

thanks.
Примерно такое (EAV/CR) я и хочу сделать, только хочу использовать не по одной таблице для каждого типа, а хранить в одной таблице все типы (в нескольких полях), тем более что у меня только 3 типа, пока.

Судя по всему, этот вариант предпочтительнее, чем SQL DDL.
Код: plaintext
1.
2.
Best regards,
             vinni.
...
Рейтинг: 0 / 0
Непостоянное число справочников с редактируемыми числом и типом полей
    #33395813
shuklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vinniPoohПримерно такое (EAV/CR) я и хочу сделать, только хочу использовать не по одной таблице для каждого типа, а хранить в одной таблице все типы (в нескольких полях), тем более что у меня только 3 типа, пока.



тогда LOCNET - там внутри пример рабочего проекта для Access можно брать и пользоваться. Вся БД занимает 5 таблиц. Позволяет реализовать практически все.
...
Рейтинг: 0 / 0
Непостоянное число справочников с редактируемыми числом и типом полей
    #33395822
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vinniPooh wrote:
> 2 locky
>
> А что ты сам думаешь про весь этот геморрой? Может, и вправду
> изнасиловать заказчика и перейти на ООСБД?
> Мне важны мнения людей, которые столкнулись с этим на практике.
>
А чо мне думать? я с таким работаю. Ничо, работать можно. Есть свои
минусы, но куча плюсов.
Правда, у меня реализация другая, но принципы те же.
А ООБД - это к чукотским сказочникам.

--
-------------------------
There's no silver bullet!
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Непостоянное число справочников с редактируемыми числом и типом полей
    #33395928
jikez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно XML использовать, и хранить его в базе, к примеру 9-й оракл это прекрасно умеет
...
Рейтинг: 0 / 0
Непостоянное число справочников с редактируемыми числом и типом полей
    #33396114
Dimkas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!

Поделюсь своим опытом по этому вопросу.

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

Мы пошли по пути, который автор обозначил как SQL DDL.

Вот что из этого получилось (в общих чертах):

Структура справочников:
1. Термин справочник определён как набор объектов (таблиц, триггеров и т.д.), описывающих нечто из предметной области.
2. Внутри справочника выделили несколько типов таблиц:
- линейная таблица справочника - основная таблица справочника
- таблицы дополнительных свойств
- таблицы оглавлений, задающие иерархию для линейной таблицы
- ещё пара типов таблиц...
3. Для линейных таблиц справочников утвердили набор стандартных полей (код, наименование, период действия записи, дата создания записи). Всего таких служебных полей получилось 9 штук. Эти поля есть в каждой линейной таблице, их нельзя удалить и их порядок фиксирован.
4. Кроме служебных полей есть дополнительные поля (начиная с 10-го), которые можно добавлять/удалять по мере необходимости.
5. Среди дополнительных полей могут встречаться поля-ссылки, т.е. поля ссылающиеся на другие справочники.

Порядок работы самой программы:
1. Для хранения описательной информации сформирован набор из примерно 10 служебных таблиц (репозитарий), в которых хранятся данные о полных наименованиях объектов, списки полей (с дополнительными свойствами) и ещё много чего, что понадобилось для нормальной работы.
2. Рядовым действием системы является создания нового объекта (справочника, оглавления, поля, ...), а это значит, что выполняются соотвествующие DDL-команды (CREATE TABLE, ALTER TABLE, CREATE TRIGGER, ...). Соотвественно для таблиц есть интерфейс добавления/удаления полей/индексов/связей.
3. Для просмотра справочников испольется многооконный интерфейс и обычные гриды. Для редактирования записей приходится для каждой таблицы строить свою форму в виде a'la property editor в Delphi/C#/...

вот такая основная идея - будут вопросы, отвечу

с уважением,
Дмитрий Жучков
...
Рейтинг: 0 / 0
Непостоянное число справочников с редактируемыми числом и типом полей
    #33396551
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эххх!
Когда-то (88г?) я все это делал на Clipper. (Создание, объединение (join, union), ведение, фильтрация, индексация, выборка с подсуммировкой, автокалк поля (со ссылками на другие таблицы), триггеры для ведения связанных таблиц, генертор отчетов (на базе индексов),..) - называлась "генератор задач". Линейные задачи типа касса, банк и т.д получались за час.
...
Рейтинг: 0 / 0
Непостоянное число справочников с редактируемыми числом и типом полей
    #33396753
ecv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ecv
Гость
Элементарно, Ватсон !
таб1:
имя справочника
ид объекта
таб2:
ид (из таб1)
имя поля
значения поля (varchar2(32000))
дата изменений

еще надо добавить иерархич классификацию всего этого хоз-ва

на оракле летает, запросы тривиальные
...
Рейтинг: 0 / 0
Непостоянное число справочников с редактируемыми числом и типом полей
    #33396890
vinniPooh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Dimkas

Спасибо за описание

Не мог бы ты распространиться о скорости написания, работы и усилиях, необходимых для поддержки всего этого?
Что было особенно неприятно делать, какие подводные камни, что при таком подходе радовало?
Насколько я понимаю, при создании нового справочника модифицируются (добавление внешних ключей) также и те таблицы, которые ссылаются на этот справочник - для поддержания целостности?
На какой базе это работало?
Так как у меня конкретная СУБД не определена, то боюсь, что могут возникнуть проблемы с мигрированием.

2 ecv

Благодарю тебя, о божественный гуру

Просвети меня, сокровищница знаний, по поводу достоинств и недостатков метода, и как поддерживается ссылочная целостность и версионность при этом подходе?

P.S. Рекомендую прочитать топик.
Код: plaintext
1.
2.
Best regards,
             vinni.
...
Рейтинг: 0 / 0
Непостоянное число справочников с редактируемыми числом и типом полей
    #33397526
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Единая структура справочников это когда хорошо, а когда и не очень.
Я сделал единый механизм построения простых форм.
http://www.sql.ru/forum/actualthread.aspx?tid=202235
http://www.sql.ru/forum/actualthread.aspx?tid=209398
Таблицы создаются программистом на сервере. Затем пишуться запросы и описания-метаданные к ним. Справочник может быть сколь угодно сложным: с лукап-полями, шапка/строки, дерево, БЛОБы, сложные фильтры, автосуммы, drilldown. Все конфигурируется без единой строчки кода в приложении. Там же определена безопасность: кому мона а кому немона.
...
Рейтинг: 0 / 0
Непостоянное число справочников с редактируемыми числом и типом полей
    #33397563
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Единая структура справочников это когда хорошо, а когда и не очень. Иногда могут понадобиться исключения.
Я сделал единый механизм построения простых форм.
http://www.sql.ru/forum/actualthread.aspx?tid=202235
http://www.sql.ru/forum/actualthread.aspx?tid=209398
Таблицы создаются программистом на сервере. Затем пишуться запросы и описания-метаданные к ним. Справочник может быть сколь угодно сложным: с лукап-полями, шапка/строки, дерево, БЛОБы, сложные фильтры, автосуммы, drilldown, цветовыделение, печать/экспорт. Все конфигурируется без единой строчки кода в приложении. Там же определена безопасность: кому мона а кому немона.
ИМХО, идеально для создания произвольных справочников и не только их. Можно при желании ввести версионность.
Всё примерно 3-4тыс. строк кода. Delphi+MSSQL
...
Рейтинг: 0 / 0
Непостоянное число справочников с редактируемыми числом и типом полей
    #33397697
Dimkas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vinniPooh2 Dimkas
Не мог бы ты распространиться о скорости написания, работы и усилиях, необходимых для поддержки всего этого?

скорость написания - первая версия была написана за полгода в одиночку, но с первого раза ни работоспособность, ни функциональность заказчика не устроили и пришлось ещё месяца 3 дописывать/переписывать. А для достижения текущего результата понадобилось примерно 5 человеко лет ;)
т.к. сейчас и СУБД другая, и функций сильно больше...
vinniPooh
Что было особенно неприятно делать, какие подводные камни, что при таком подходе радовало?

Особо неприятно то что структура таблиц меняется на ходу,
когда раньше жили на MS SQL Server'е, то DDL-операции можно было включить в транзакцию и в случае чего откатить, сейчас живём на Oracle и приходится думать как сделать аккуратнее ибо откатить DLL уже нельзя...
Подводных камней особых не вспомню, хотя конечно были трудности...
Что порадовало - тоже особенно ничего не припомню :) работа как работа...
vinniPooh
Насколько я понимаю, при создании нового справочника модифицируются (добавление внешних ключей) также и те таблицы, которые ссылаются на этот справочник - для поддержания целостности?

При создании нового справочника на него ещё никто не ссылается, ведь его только что не существовало :). Вопрос надо уточнить...
vinniPooh
На какой базе это работало?

Сначала работало на MS SQL 97, потом MS SQL 2000, потом переехали на Oracle 8.1.7 и FireBird 1.5, сейчас качуем в сторону Oracle 10.2 и FireBird 2.0
vinniPooh
Так как у меня конкретная СУБД не определена, то боюсь, что могут возникнуть проблемы с мигрированием.

не понял, какие проблемы? мигрированием чего и куда?
...
Рейтинг: 0 / 0
Непостоянное число справочников с редактируемыми числом и типом полей
    #33397762
vinniPooh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 LSV

Это все конечно круто, но я пишу на java, а потом, как-то все это громоздко выглядит.
И речь идет о том, чтобы не писать запросы для каждого справочника в явном виде, а спрятать это от программиста. Если я правильно тебя понял.

Расскажи плиз по-подробнее, я вообще не работал с Delphi и скорее всего, чего-то недопонял
Код: plaintext
1.
2.
Best regards,
             vinni.
...
Рейтинг: 0 / 0
Непостоянное число справочников с редактируемыми числом и типом полей
    #33397804
vinniPooh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimkas
vinniPooh
Насколько я понимаю, при создании нового справочника модифицируются (добавление внешних ключей) также и те таблицы, которые ссылаются на этот справочник - для поддержания целостности?
При создании нового справочника на него ещё никто не ссылается, ведь его только что не существовало :). Вопрос надо уточнить...
После того, как справочник создан, на него могут ссылаться другие таблицы. Прописывали ли вы явно в других таблицах внешние ключи на этот справочник? Или целостность поддерживалась каким-то другим образом?
Dimkas
vinniPooh
Так как у меня конкретная СУБД не определена, то боюсь, что могут возникнуть проблемы с мигрированием.

не понял, какие проблемы? мигрированием чего и куда?
Посколько синтаксис SQL DDL может, к сожалению, быть различным для разных СУБД, а у меня целевая СУБД не определена или может меняться (пути кастомера неисповедимы), теоретически могут возникнуть проблемы с переходом с одной базы на другую.
...
Рейтинг: 0 / 0
Непостоянное число справочников с редактируемыми числом и типом полей
    #33397837
Dimkas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vinniPooh После того, как справочник создан, на него могут ссылаться другие таблицы. Прописывали ли вы явно в других таблицах внешние ключи на этот справочник? Или целостность поддерживалась каким-то другим образом?

Да, внешние ключи прописываются при добавлении в справочник поля, ссылающегося на другой справочник.
Периодически администратор системы выполняет так называемую проверку целостности - проверяются все первичные и внешние ключи, наличие и правильность триггеров и т.д.
vinniPooh Посколько синтаксис SQL DDL может, к сожалению, быть различным для разных СУБД, а у меня целевая СУБД не определена или может меняться (пути кастомера неисповедимы), теоретически могут возникнуть проблемы с переходом с одной базы на другую.
теперь понял :) у нас система работает на двух разных базах (Oracle и FireBird).
естественно, что для них запросы строятся разные. для этого введён промежуточный программный слой, которому приложение сообщает что надо сделать, а он уже делает... вобщем то всё как обычно...
...
Рейтинг: 0 / 0
Непостоянное число справочников с редактируемыми числом и типом полей
    #33397876
ecv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ecv
Гость
vinniPooh
Просвети меня, сокровищница знаний, по поводу достоинств и недостатков метода, и как поддерживается ссылочная целостность и версионность при этом подходе?

P.S. Рекомендую прочитать топик.

достоинства известны
недостаток - не покатит большой объем > 100000 объектов в одном спр
триггера или прикладнуха - за все надо платить
...
Рейтинг: 0 / 0
Непостоянное число справочников с редактируемыми числом и типом полей
    #33397982
vinniPooh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimkas
Да, внешние ключи прописываются при добавлении в справочник поля, ссылающегося на другой справочник.
Периодически администратор системы выполняет так называемую проверку целостности - проверяются все первичные и внешние ключи, наличие и правильность триггеров и т.д.

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


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