Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Непостоянное число справочников с редактируемыми числом и типом полей
|
|||
|---|---|---|---|
|
#18+
Всем привет. Кто встречался, плиз, поделитесь опытом. Проблема: Заказчик хочет, чтобы было различное число справочников, в каждом какие-то поля. Пользователь хочет иметь возможность создавать/редактировать/удалять справочники и поля в них в рантайме. Разумеется, справочники дальше используются в работе и на них появляются ссылки из других таблиц. В справочнике также могут быть поля-ссылки на другие справочники. Версионность тоже поддерживать надо (но вопрос не о версиях). Так как это всего лишь справочники, то не обязательно, чтобы эта часть системы очень быстро работала. Есть два варианта решения: 1. Использовать SQL DDL для создания/изменения таблиц в рантайме. Создавать таблицы, триггеры, ключи, таблицы с историей и т.д. 2. Создать общую структуру для всех справочников - таблица Справочники, таблица Поля, таблица Значения. Запись в таблице Поля ссылается на Справочник, которому это поле принадлежит, запись в таблице Значения ссылается на Поле, которому принадлежит значение, и на Тип данных, возможно. Если кто-то использовал это в реальном приложении, поделитесь плиз опытом по поводу производительности, простоты написания и поддержки, простоты использования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2005, 17:23 |
|
||
|
Непостоянное число справочников с редактируемыми числом и типом полей
|
|||
|---|---|---|---|
|
#18+
vinniPooh....Если кто-то использовал это в реальном приложении, поделитесь плиз опытом по поводу производительности, простоты написания и поддержки, простоты использования. делали похожую весчь... смысл следующий (в двух словах без конкретики)... практически в одну таблицу упаковываются знания о связях и полях. связи задают "маршрут" выборки. поля - типы, правила сортировки, спец поля (вычисляемые) и т.п.. на оракле летало без проблем (что лично на меня произвело впечатление - когда без индексов идёт выборка кадра данных с кучей условиями, под несколько кб сам запрос, массивы данных уровня боинга и айбиэм - и всё енто за считанные копейки - респект). честно говоря это не моё решение (имееться ввиду логика), но очень элегантное... с точки зрения обращений - мона выделить два этапа. Вытаскивание связей и составление сиквол запроса. Ну и вторая фаза - уже подключалась логика накачки сетевого кадра - тут уже сами данные подтягивались, но это уже другая песня. с уважением (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2005, 17:33 |
|
||
|
Непостоянное число справочников с редактируемыми числом и типом полей
|
|||
|---|---|---|---|
|
#18+
2 kolobok0: Спасибо, значит работет быстро... kolobok0 делали похожую весчь... смысл следующий (в двух словах без конкретики)... А вот можно с конкретикой :) - сколько времени примерно писалось это счастье, как именно формируется запрос, как поддерживаются внешние ссылки на такой справочник, какая именно структура (если это не коммерческая тайна :)) Ведь это существенно усложняет все запросы с использованием справочников. 2 All: А кто-нибудь создавал/изменял таблицы в рантайме? Поделитесь, плиз. Как насчет совместимости версий SQL у разных RDBMS? Может, придется реализовывать разные запросы для разных СУБД? Нерадостно это звучит... Оба подхода имеют свои преимущества и недостатки, и я даже не знаю, что хуже :(. Каково ваше мнение по этому поводу? Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2005, 18:05 |
|
||
|
Непостоянное число справочников с редактируемыми числом и типом полей
|
|||
|---|---|---|---|
|
#18+
vinniPoohОба подхода имеют свои преимущества и недостатки, и я даже не знаю, что хуже :(. Каково ваше мнение по этому поводу? Используйте ООСУБД. http://www.membrana.ru/articles/readers/2005/09/02/200800.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2005, 18:08 |
|
||
|
Непостоянное число справочников с редактируемыми числом и типом полей
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2005, 18:31 |
|
||
|
Непостоянное число справочников с редактируемыми числом и типом полей
|
|||
|---|---|---|---|
|
#18+
2 shuklin Спасибо за свежую мыслю, однако по понятным причинам ООСУБД меня не устраивает. Хотя кто знает... :) Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2005, 18:36 |
|
||
|
Непостоянное число справочников с редактируемыми числом и типом полей
|
|||
|---|---|---|---|
|
#18+
vinniPooh2 kolobok0: - сколько времени примерно писалось это счастье, как именно формируется запрос, как поддерживаются внешние ссылки на такой справочник, какая именно структура (если это не коммерческая тайна :)) Ведь это существенно усложняет все запросы с использованием справочников........ сразу оговорюсь... преследовался механизм НЕ в лёт добавлять таблицы и поля. А НЕ переделывать "поисковик" при каких-либо переделках структуры БД. а это немного рядом, я бы сказал... коммерческая - думаю уже протухла... но на форуме выкладывать не буду...стучитесь в мыло... если найду спеку, завтра вышлю... правда постараюсь оставить только суть в русле вашего вопроса...да, она на ангельском... думаю с этим проблем не будет... с уважением (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2005, 18:38 |
|
||
|
Непостоянное число справочников с редактируемыми числом и типом полей
|
|||
|---|---|---|---|
|
#18+
2 locky А что ты сам думаешь про весь этот геморрой? Может, и вправду изнасиловать заказчика и перейти на ООСБД? Мне важны мнения людей, которые столкнулись с этим на практике. Как-то я на заре своей программистской юности пытался реализовать наследование в РСУБД, но от этой идеи быстренько отказался - уже очень все было сложно, и время не позволяло. Хороший плюс в пользу ОО. Хотя серебряной пули нет и там ;) Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2005, 18:50 |
|
||
|
Непостоянное число справочников с редактируемыми числом и типом полей
|
|||
|---|---|---|---|
|
#18+
vinniPoohСпасибо за свежую мыслю, однако по понятным причинам ООСУБД меня не устраивает. Хотя кто знает... :) В таком случае можно посмотреть EAV и LOCNET ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2005, 19:11 |
|
||
|
Непостоянное число справочников с редактируемыми числом и типом полей
|
|||
|---|---|---|---|
|
#18+
2 shuklin: thanks. Примерно такое (EAV/CR) я и хочу сделать, только хочу использовать не по одной таблице для каждого типа, а хранить в одной таблице все типы (в нескольких полях), тем более что у меня только 3 типа, пока. Судя по всему, этот вариант предпочтительнее, чем SQL DDL. Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2005, 19:23 |
|
||
|
Непостоянное число справочников с редактируемыми числом и типом полей
|
|||
|---|---|---|---|
|
#18+
vinniPoohПримерно такое (EAV/CR) я и хочу сделать, только хочу использовать не по одной таблице для каждого типа, а хранить в одной таблице все типы (в нескольких полях), тем более что у меня только 3 типа, пока. тогда LOCNET - там внутри пример рабочего проекта для Access можно брать и пользоваться. Вся БД занимает 5 таблиц. Позволяет реализовать практически все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2005, 20:19 |
|
||
|
Непостоянное число справочников с редактируемыми числом и типом полей
|
|||
|---|---|---|---|
|
#18+
vinniPooh wrote: > 2 locky > > А что ты сам думаешь про весь этот геморрой? Может, и вправду > изнасиловать заказчика и перейти на ООСБД? > Мне важны мнения людей, которые столкнулись с этим на практике. > А чо мне думать? я с таким работаю. Ничо, работать можно. Есть свои минусы, но куча плюсов. Правда, у меня реализация другая, но принципы те же. А ООБД - это к чукотским сказочникам. -- ------------------------- There's no silver bullet! Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2005, 20:30 |
|
||
|
Непостоянное число справочников с редактируемыми числом и типом полей
|
|||
|---|---|---|---|
|
#18+
Можно XML использовать, и хранить его в базе, к примеру 9-й оракл это прекрасно умеет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2005, 22:56 |
|
||
|
Непостоянное число справочников с редактируемыми числом и типом полей
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Поделюсь своим опытом по этому вопросу. В своё время *в 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#/... вот такая основная идея - будут вопросы, отвечу с уважением, Дмитрий Жучков ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2005, 07:26 |
|
||
|
Непостоянное число справочников с редактируемыми числом и типом полей
|
|||
|---|---|---|---|
|
#18+
Эххх! Когда-то (88г?) я все это делал на Clipper. (Создание, объединение (join, union), ведение, фильтрация, индексация, выборка с подсуммировкой, автокалк поля (со ссылками на другие таблицы), триггеры для ведения связанных таблиц, генертор отчетов (на базе индексов),..) - называлась "генератор задач". Линейные задачи типа касса, банк и т.д получались за час. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2005, 11:08 |
|
||
|
Непостоянное число справочников с редактируемыми числом и типом полей
|
|||
|---|---|---|---|
|
#18+
Элементарно, Ватсон ! таб1: имя справочника ид объекта таб2: ид (из таб1) имя поля значения поля (varchar2(32000)) дата изменений еще надо добавить иерархич классификацию всего этого хоз-ва на оракле летает, запросы тривиальные ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2005, 11:53 |
|
||
|
Непостоянное число справочников с редактируемыми числом и типом полей
|
|||
|---|---|---|---|
|
#18+
2 Dimkas Спасибо за описание Не мог бы ты распространиться о скорости написания, работы и усилиях, необходимых для поддержки всего этого? Что было особенно неприятно делать, какие подводные камни, что при таком подходе радовало? Насколько я понимаю, при создании нового справочника модифицируются (добавление внешних ключей) также и те таблицы, которые ссылаются на этот справочник - для поддержания целостности? На какой базе это работало? Так как у меня конкретная СУБД не определена, то боюсь, что могут возникнуть проблемы с мигрированием. 2 ecv Благодарю тебя, о божественный гуру Просвети меня, сокровищница знаний, по поводу достоинств и недостатков метода, и как поддерживается ссылочная целостность и версионность при этом подходе? P.S. Рекомендую прочитать топик. Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2005, 12:20 |
|
||
|
Непостоянное число справочников с редактируемыми числом и типом полей
|
|||
|---|---|---|---|
|
#18+
Единая структура справочников это когда хорошо, а когда и не очень. Я сделал единый механизм построения простых форм. http://www.sql.ru/forum/actualthread.aspx?tid=202235 http://www.sql.ru/forum/actualthread.aspx?tid=209398 Таблицы создаются программистом на сервере. Затем пишуться запросы и описания-метаданные к ним. Справочник может быть сколь угодно сложным: с лукап-полями, шапка/строки, дерево, БЛОБы, сложные фильтры, автосуммы, drilldown. Все конфигурируется без единой строчки кода в приложении. Там же определена безопасность: кому мона а кому немона. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2005, 14:39 |
|
||
|
Непостоянное число справочников с редактируемыми числом и типом полей
|
|||
|---|---|---|---|
|
#18+
Единая структура справочников это когда хорошо, а когда и не очень. Иногда могут понадобиться исключения. Я сделал единый механизм построения простых форм. http://www.sql.ru/forum/actualthread.aspx?tid=202235 http://www.sql.ru/forum/actualthread.aspx?tid=209398 Таблицы создаются программистом на сервере. Затем пишуться запросы и описания-метаданные к ним. Справочник может быть сколь угодно сложным: с лукап-полями, шапка/строки, дерево, БЛОБы, сложные фильтры, автосуммы, drilldown, цветовыделение, печать/экспорт. Все конфигурируется без единой строчки кода в приложении. Там же определена безопасность: кому мона а кому немона. ИМХО, идеально для создания произвольных справочников и не только их. Можно при желании ввести версионность. Всё примерно 3-4тыс. строк кода. Delphi+MSSQL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2005, 14:48 |
|
||
|
Непостоянное число справочников с редактируемыми числом и типом полей
|
|||
|---|---|---|---|
|
#18+
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 Так как у меня конкретная СУБД не определена, то боюсь, что могут возникнуть проблемы с мигрированием. не понял, какие проблемы? мигрированием чего и куда? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2005, 15:25 |
|
||
|
Непостоянное число справочников с редактируемыми числом и типом полей
|
|||
|---|---|---|---|
|
#18+
2 LSV Это все конечно круто, но я пишу на java, а потом, как-то все это громоздко выглядит. И речь идет о том, чтобы не писать запросы для каждого справочника в явном виде, а спрятать это от программиста. Если я правильно тебя понял. Расскажи плиз по-подробнее, я вообще не работал с Delphi и скорее всего, чего-то недопонял Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2005, 15:38 |
|
||
|
Непостоянное число справочников с редактируемыми числом и типом полей
|
|||
|---|---|---|---|
|
#18+
Dimkas vinniPooh Насколько я понимаю, при создании нового справочника модифицируются (добавление внешних ключей) также и те таблицы, которые ссылаются на этот справочник - для поддержания целостности? При создании нового справочника на него ещё никто не ссылается, ведь его только что не существовало :). Вопрос надо уточнить... После того, как справочник создан, на него могут ссылаться другие таблицы. Прописывали ли вы явно в других таблицах внешние ключи на этот справочник? Или целостность поддерживалась каким-то другим образом? Dimkas vinniPooh Так как у меня конкретная СУБД не определена, то боюсь, что могут возникнуть проблемы с мигрированием. не понял, какие проблемы? мигрированием чего и куда? Посколько синтаксис SQL DDL может, к сожалению, быть различным для разных СУБД, а у меня целевая СУБД не определена или может меняться (пути кастомера неисповедимы), теоретически могут возникнуть проблемы с переходом с одной базы на другую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2005, 15:52 |
|
||
|
Непостоянное число справочников с редактируемыми числом и типом полей
|
|||
|---|---|---|---|
|
#18+
vinniPooh После того, как справочник создан, на него могут ссылаться другие таблицы. Прописывали ли вы явно в других таблицах внешние ключи на этот справочник? Или целостность поддерживалась каким-то другим образом? Да, внешние ключи прописываются при добавлении в справочник поля, ссылающегося на другой справочник. Периодически администратор системы выполняет так называемую проверку целостности - проверяются все первичные и внешние ключи, наличие и правильность триггеров и т.д. vinniPooh Посколько синтаксис SQL DDL может, к сожалению, быть различным для разных СУБД, а у меня целевая СУБД не определена или может меняться (пути кастомера неисповедимы), теоретически могут возникнуть проблемы с переходом с одной базы на другую. теперь понял :) у нас система работает на двух разных базах (Oracle и FireBird). естественно, что для них запросы строятся разные. для этого введён промежуточный программный слой, которому приложение сообщает что надо сделать, а он уже делает... вобщем то всё как обычно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2005, 16:08 |
|
||
|
Непостоянное число справочников с редактируемыми числом и типом полей
|
|||
|---|---|---|---|
|
#18+
vinniPooh Просвети меня, сокровищница знаний, по поводу достоинств и недостатков метода, и как поддерживается ссылочная целостность и версионность при этом подходе? P.S. Рекомендую прочитать топик. достоинства известны недостаток - не покатит большой объем > 100000 объектов в одном спр триггера или прикладнуха - за все надо платить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2005, 16:22 |
|
||
|
Непостоянное число справочников с редактируемыми числом и типом полей
|
|||
|---|---|---|---|
|
#18+
Dimkas Да, внешние ключи прописываются при добавлении в справочник поля, ссылающегося на другой справочник. Периодически администратор системы выполняет так называемую проверку целостности - проверяются все первичные и внешние ключи, наличие и правильность триггеров и т.д. А когда на вновь созданный справочник должна ссылаться таблица с данными, она как-то модифицируется? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2005, 16:40 |
|
||
|
|

start [/forum/topic.php?fid=32&fpage=145&tid=1545541]: |
0ms |
get settings: |
9ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
38ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
76ms |
get tp. blocked users: |
2ms |
| others: | 274ms |
| total: | 438ms |

| 0 / 0 |
