|
|
|
Возможность Создание сущностей пользователем
|
|||
|---|---|---|---|
|
#18+
Приведу пример чтобы было понятнее. Потому что сформулировать тему граммотно не очень получается. Есть например карточки товаров Каждая карточка может иметь свой уникальный и не уникальный набор атрибутов Задача состоит в том чтобы дать возможность пользователю через интерфейс создавать свои карточки (сущности). То есть по сути создавать таблицы Как это лучше реализовать. create table выполнять. Или же Создать виртуальную бд на базе нескольких. Например. в одной таблице хранятиться. Список таблиц. В другой список полей. В третий список значений. Или например создать таблицу универсальную с большим запасом полей анонимных. Вообщем наверное много чего можно придумать. Наверное у каждого способа есть недостатки и достоинства. Хотелось по этому поводу получить какую нибудь фундаментальную информацию. Повторяю Даже не знаю как охарактеризовать данную тему. Ну или у кого какой опыт есть по этому поводу тоже буду рад если поделитесь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2009, 10:24 |
|
||
|
Возможность Создание сущностей пользователем
|
|||
|---|---|---|---|
|
#18+
Foxluck, Есть еще EAV. У него свои тараканы (как и у всех перечисленных вариантов). Ответ - что лучше использовать - можно дать только тогда, когда будет понятно ЗАЧЕМ человек создает новую сущность и ЧТО С НЕЙ будут делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2009, 12:27 |
|
||
|
Возможность Создание сущностей пользователем
|
|||
|---|---|---|---|
|
#18+
Хорошо переформулирую. Задача состоит в том чтобы пользователь через интерфейс мог создавать свои сущности. То что нужны еще механизмы обработки согласен. Скажем так пусть существует механизм (алгоритм) использующий метаинформацию этих сущностей. Метаинформация сущности это например кол-во полей и их тип. Имя таблицы. Вообщем все что описывает саму сущность. Или возможно она сама себя самоописывает. Скажем так не лучший способ интересует, а вообще все способы какие есть. А также как это тематика вообще называется. Как можно классифицировать данную задачу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2009, 13:18 |
|
||
|
Возможность Создание сущностей пользователем
|
|||
|---|---|---|---|
|
#18+
> Как можно классифицировать данную задачу. Набор антипаттернов проектирования. Большая такая задача, серьезная. А возникает эта задача потому, что работу архитектора базы данных пытаются выполнять люди, которые в принципе не должны и не умеют этого делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2009, 13:57 |
|
||
|
Возможность Создание сущностей пользователем
|
|||
|---|---|---|---|
|
#18+
Да, круто. Еще каждому пользователю дать доступ в код процедур алгоритмов - вообще полный бардак будет. А что касается товаров - товары ведь объединены в группы, для каждой группы создать несколько полей (сущностей), которые пользователь должен заносить обязательно. но не смог бы удалять, ну а потом пусть он добавляет свои сущности. Только как их грамотно обработать? Структура таблиц: Товары: ТоварИД, Название, ГруппаТовараИД ...... СвойстваТовара: СвойствоИД, ГруппаТовараИД, ПользовательИД, ЗащищеноОтУдаления, ВыражениеСвойства, ТипДанныхСвойства .... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2009, 14:01 |
|
||
|
Возможность Создание сущностей пользователем
|
|||
|---|---|---|---|
|
#18+
Ваши насмешки разделяю полностью. Может проще научить пользователя. Реалиционным БД и научить писать скрипты. Ну все же есть некий тут разумный стержень. Создать еще один слой абстракции. Такой конструктор который намного более ограничен чем предшествуй инструмент в виде sql и средств администрирования но в тоже время намного проще. И со своей конкретной задачей справляющийся. Конкретно задача в примере состоит в том. чтобы. Создавать Карточки Товара (юзерский язык ) Ну еще конкретнее. Про обработку что с ними потом можно делать. Вот товар Утюг У него есть свойства Имя, Габариты. Есть товар Телевизор у него есть Имя, Габариты, + Диагональ. Когда пользователь выбирает посмотреть все телевизоры. Пользователь видит список Телевизоров в каждом элементе списка он видит характеристики и длину диагонали тоже По этому полю можно сортировать делать поиск. еще что то. А когда выбирают все Утюги диагонали нет. Каждый раз гонять программиста создай мне товар например "Телефон " со своими какими то параметрами не очень то канает. RodionAT, Решение похоже на. Создать виртуальную бд на базе нескольких таблиц. То есть ГруппаТоваров - это список таблиц. Свойство Товара - список полей. .... Да вот тут интереснее как это все обрабатывать. Потом. Написать можно но насколько это разумно быстро и прочее. Я вот склоняюсь к идеи. Создавать все таки таблицы create table и использовать обычный sql . А не писать фиг знает какой механизм обработки. Для этих виртуальных таблиц. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2009, 14:34 |
|
||
|
Возможность Создание сущностей пользователем
|
|||
|---|---|---|---|
|
#18+
FoxluckВаши насмешки разделяю полностью. Может проще научить пользователя. Реалиционным БД и научить писать скрипты. ... Вот товар Утюг У него есть свойства Имя, Габариты. Есть товар Телевизор у него есть Имя, Габариты, + Диагональ. Когда пользователь выбирает посмотреть все телевизоры. Пользователь видит список Телевизоров в каждом элементе списка он видит характеристики и длину диагонали тоже По этому полю можно сортировать делать поиск. еще что то. То есть ГруппаТоваров - это список таблиц. Свойство Товара - список полей. .... Да вот тут интереснее как это все обрабатывать. Потом. Написать можно но насколько это разумно быстро и прочее. Я вот склоняюсь к идеи. Создавать все таки таблицы create table и использовать обычный sql . А не писать фиг знает какой механизм обработки. Для этих виртуальных таблиц.Для этого конкретного случая я бы использовал EAV + описание метаинформации (возможно тоже на EAV). Собственно, то что вы пытаетесь изобразить - каталог товаров какого-нибудь интернет-магазина. Поскольку товаров будет не так много - то EAV подойдет. PS: не советую обощать этот принцип. На больших объемах данных EAV вам покажет какой он на самом деле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2009, 14:40 |
|
||
|
Возможность Создание сущностей пользователем
|
|||
|---|---|---|---|
|
#18+
> насмешки разделяю полностью Это не насмешки, это констатация факта. > есть некий тут разумный стержень Ни одного, увы. > Создать еще один слой абстракции А это совершенно другая задача, которая не имеет к сформулированной никакого отношения. Метаметамодели, отличные от стандартных, используются достаточно широко. > Вот товар Посмотрите: Вы еще не написали ни строчки DDL, а уже сделали кучу ошибок. Утюг - это не товар. Утюг - это бытовой прибор вполне конкретного назначения. И характеристики утюга как товара ничего общего с характеристиками утюга как бытового прибора не имеют. За любым желанием дать пользователю возможность ковырять структуру данных стоит неумение проектировать. О чем я и говорил. Начните с учебников по проектированию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2009, 15:01 |
|
||
|
Возможность Создание сущностей пользователем
|
|||
|---|---|---|---|
|
#18+
Bely, Да вот концепция EAV я не знал как это называется правильно. Когда имел в виду виртуальную Бд на основе нескольких таблиц. Спасибо за часть ответа. Вот этот EAV мне не нравиться. из за того. что нормальный sql летит к черту. это вообще какой гипертрофированный предельный случай нормализации. вся нормализация затратиталась на эту гипертрофированность и дальше вся нормальная привычная работа с бд летит к черту. И про большие объемы данных я согласен. что все будет очень плохо. Интернет магазин может быть и не таким уж и маленьким по объему товаров. Также просто у магазина может быть большая посещаемость. Да и потом не обязательно это магазин. Может просто какой -то инфо. каталог. Плюс косость программирования. Вот Теперь могу лучше сформулировать. EAV против create table. Почему бы не создавать таблицы через ddl. а потом работать с ними как обычно. Почему вы рекомендуете EAV? А про то что утюг не товар это верно подмечено :). Хотя утюг с ценником это уже товар :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2009, 15:27 |
|
||
|
Возможность Создание сущностей пользователем
|
|||
|---|---|---|---|
|
#18+
Да вот еще одно решение Наследование. Если создать абстрактный товар. описать там общие свойства. Абстрактный товар tovar id name cost дальше наследник custom_tovar id - parent_id - ид объекта от которого наследуемся. diagonal - новый атрибут. Тоже не знаю как этот подход грамотно называется наверное что то вроде ООСУБД мне кажется он более разумным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2009, 15:45 |
|
||
|
Возможность Создание сущностей пользователем
|
|||
|---|---|---|---|
|
#18+
FoxluckНу все же есть некий тут разумный стержень. Создать еще один слой абстракции. выделить юбому пользователю собственный SandBox. но что делать с критическим апдейтами системы - послать наработки пользователя в топку? (многие так и делают - ИМХО это крайне некорректно) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2009, 15:56 |
|
||
|
Возможность Создание сущностей пользователем
|
|||
|---|---|---|---|
|
#18+
Нормальное решение состоит - 1.плоские таблицы (описание предметной области) + 2.ЕАV (для пользовательских расширений). Но, хорошо бы первую часть описывать (генерировать) так же собственными средствами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2009, 16:07 |
|
||
|
Возможность Создание сущностей пользователем
|
|||
|---|---|---|---|
|
#18+
proposed amendment, Для критичных апдейтов придеться писать конверторы данных. Думаю это решаемо. Еще интересный способ прочел у вас на форуме. Тоже очень интересный. цитирую >Все извращения,которые не укладываются в общую модель, хранил бы в поле XML(список с >двумя полями:наименование,значение).Минимум телодвижений, и пусть себе ни в чем не >отказывают. Гибридные БД. Тоже очень интересное решение. Есть например товар с набором общих признаков. Все дополнительные поля. Хранить в неком дополнительном поле в формате XML. Все эти решения гораздо интереснее чем этот EAV Но почему то именно его все вспоминают в первую очередь. И тут мне его тоже порекомендовали. Хотя если читать. Другие ветки этго форума про EAV , он далеко не однозначен. Да я и сам как то с ним сталкивался. Он работает безусловно. Но смотриться ужасно. Тех поддержка сложна. Скорость явно будет плохой. Все не прозрачно. Какой то целый движок работы с EAV надо реализовывать. Нужна реализация EAV у меня её просто нет. Самому писать не хочеться. Должен быть стандарт тогда уж. Опять же язык запросов какой то нужен специальный для EAV Фильтры группировки. Все то что есть в обычном sql. Где это можно узнать? Если уж мы выбираем EAV который являеться виртуальной копией БД. Тогда почему уж не использовать create table , alter table. Зачем делать зеркало системы которая уже есть. В случае гибридных и ОО случаев тут еще можно спорить согласен. А вот EAV вообще являеться попыткой повторить функционал который итак представляет СУБД. (create table , alter table) Может я ошибаюсь но мне это так видеться пока что. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2009, 16:18 |
|
||
|
Возможность Создание сущностей пользователем
|
|||
|---|---|---|---|
|
#18+
Сахават ЮсифовНормальное решение состоит. ИМХО в любом случае получится некоторое, в той или иной степени актуальное, пересечение некоторых множеств - пользовательской и родительской - первый вопрос, что делать если родительское существенно модифицируется. примеры (элементарные) - меняется структура директорий на сервере - пользователи плачут кровавыми слезами; оптимизируются справочники КИС - пользовательские подключенные системы валятся с ног (да мало ли таких примеров - в общем случае "обратная совместимость" при развитии систем) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2009, 16:20 |
|
||
|
Возможность Создание сущностей пользователем
|
|||
|---|---|---|---|
|
#18+
FoxluckА вот EAV вообще являеться попыткой повторить функционал который итак представляет СУБД. (create table , alter table) Может я ошибаюсь но мне это так видеться пока что. ИМХО не то, чтобы повторить... использовать существующий движок БД и накатать поверх него любой универсальный функционал. хороших, эффективных, решений промышленного масштаба я не знаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2009, 16:23 |
|
||
|
Возможность Создание сущностей пользователем
|
|||
|---|---|---|---|
|
#18+
proposed amendmentFoxluckА вот EAV вообще являеться попыткой повторить функционал который итак представляет СУБД. (create table , alter table) Может я ошибаюсь но мне это так видеться пока что. ИМХО не то, чтобы повторить... использовать существующий движок БД и накатать поверх него любой универсальный функционал. хороших, эффективных, решений промышленного масштаба я не знаю. А откуда их знать если их нет просто и быть не может. потому что это бред. Кто нибудь знает хорошие решения EAV какие то возможно спецификации ? XML и ОО поддержка осуществляются некоторыми СУБД. а вот EAV на уровне СУБД осуществлена где нибудь? Кто нибудь слышал об этом. :) Этого не может быть потому что это дублирование того Базового функционала который есть. Что дает EAV. ? Чего не может дать ddl и dml ? Я слышал аргументацию что вроде какие то проблемы с безопаснотью. что это плохо когда пользователь создает 200 таблиц и т.п. может у вас есть какая нибудь буду рад услышать критику. ну или поддержку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2009, 16:44 |
|
||
|
Возможность Создание сущностей пользователем
|
|||
|---|---|---|---|
|
#18+
Foxluck, Зря вы со своими определениями типа "бред" и т.д. сыплете. Возьмем простой случай. Описываем процесс. Допустим для этого процесса процессором может быть любой ПС с процом от П4, или любой мейнфрейм, или ПС с процом П3 но с спецприблудой, или 25 квалифицированных расчетчиков с Ситизен в руках и т.д. Второй пример, В сборку могут войти сборки, детали, комплексы, комплекты,... И при этом детали должны быть только закаленные.. Все это надо декларативно описывать. Описывает ПОЛЬЗОВАТЕЛЬ. Т.е. требуются динаически скомпанованные ТИПЫ и связи. Требуется навигационный механизм вдоль и поперек, через агрегатные типы и т.д. Можно все это жестко прописать в коде, а можно вывести наружу для настройки пользователем. Реализация ЕАВ < 1000 строк кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2009, 17:23 |
|
||
|
Возможность Создание сущностей пользователем
|
|||
|---|---|---|---|
|
#18+
Foxluck, по поводу создания по таблице на сущность, ИМХО: во 1-х, не надо пользователю давать права на create/drop каких либо объктов БД... мало ли что он вам под этим логином и паролем надропает. токо SELECT/INSERT/UPDATE, а ещё лучше только вызов процедур и запросы из вьюх. во 2-х, ну сделает вам пользователь на каждую "сущность" по таблице.. а если вам надо получить сводную информацию по всем сущностям? будете генерировать динамический запрос в котором селект по всем 200-м таблицам? когда всё всего в нескольких таблицах (фиксированное колличество), ещё и в НФ, возможно заранее составить "нормальные" запросы, то есть над такими данными в дальнейшем проще производить различные манипуляции ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2009, 17:31 |
|
||
|
Возможность Создание сущностей пользователем
|
|||
|---|---|---|---|
|
#18+
proposed amendment, не понял про директории и т.д. А если имеется ввиду описание системых типов, то при их изменении меняются ии удаляются и пользовательские, конечно при имеющихся правах и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2009, 17:32 |
|
||
|
Возможность Создание сущностей пользователем
|
|||
|---|---|---|---|
|
#18+
Для оптимизации и подключения внешних процедур надо предусмотреть настройку на способ хранение типов (полская таблица или ЕАВ). Устойчивые структуры нормальная система должна дибо автоматом либо по запросу продублировать вобеих структурах или где то в одной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2009, 17:35 |
|
||
|
Возможность Создание сущностей пользователем
|
|||
|---|---|---|---|
|
#18+
Foxluck, http://itblogs.ru/blogs/ cio_anatomy/archive/2008/04/11/26906.aspx ... Базу сгенерить не проблема Проблема потом иногда добавить поле в таблицу в которой уже десяток-другой миллионов записей. А если надо, чтобы оно с данного момента для всех новых записей было NOT NULL? А если для новых поле больше не нужно? Как его из таблицы удалять? Под живыми пользователями. Отвечать на вопросы из 98 года, тогда и серверы послаюже были и со sparse полями было не везде ... ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2009, 18:17 |
|
||
|
Возможность Создание сущностей пользователем
|
|||
|---|---|---|---|
|
#18+
Сахават Юсифов, Про динамически скомпоннованые типы не совсем понял. 1000 строк но какого кода. Это явно не бизнес логика. месяц работы. Тут интересная мысль была что использовать этот механизм только очень осторожно совместно с обычными плоскими таблицами. кажется человек частично и понимает проблемы которые могут возникнуть с EAV. Я же говорю что EAV абсолютно неуместен в данной задачи. Ну так что мешает динамично сгенирить ddl и dml. генерить ddl и dml кажется сложнее чем делать какие insert delete операции над тремя таблицами Добавил строку в таблице сущностей таблица создана. Добавил строку в таблице типов Тип создан. Но легкость обманчива. Потом работать с этим очень неудобно. Потом нужны механизмы вывода фильтрации и прочее. все это надо тоже писать. Все это потом еще и очень плохо читаемо. Нужны свои дебаг инструменты создавать наверное будет. Вообще пример хороший приведен. кажется все таки этот EAV в некоторых случаях оправдан. Но явно не для этого случая, явно вообще не для СУБД. То есть механизм EAV можно применять но не совместно с обычными СУБД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2009, 18:18 |
|
||
|
Возможность Создание сущностей пользователем
|
|||
|---|---|---|---|
|
#18+
КифирчикFoxluck, по поводу создания по таблице на сущность, ИМХО: во 1-х, не надо пользователю давать права на create/drop каких либо объктов БД... мало ли что он вам под этим логином и паролем надропает. токо SELECT/INSERT/UPDATE, а ещё лучше только вызов процедур и запросы из вьюх. во 2-х, ну сделает вам пользователь на каждую "сущность" по таблице.. а если вам надо получить сводную информацию по всем сущностям? будете генерировать динамический запрос в котором селект по всем 200-м таблицам? когда всё всего в нескольких таблицах (фиксированное колличество), ещё и в НФ, возможно заранее составить "нормальные" запросы, то есть над такими данными в дальнейшем проще производить различные манипуляции а а операцию DELETE не забыли ? Дело в том что при EAV вся система безопасности летит медным тазом. Потому что таблицы виртуальные становятся и удалять их можно DELETE том обычным. Drop для этого уже не нужен. по поводу общей выборки из 200 таблиц интересное замечание. Но это решаемо поскольку решаемо и на EAV. а EAV это не что иное как копия уже текущей реализации возможностей заложенных в СУБД. ну наверное динамично придется генерить sql запрос. или может какую то денормализацию использовать для ускорения процесса. можно еще наследование таблиц предложить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2009, 18:33 |
|
||
|
Возможность Создание сущностей пользователем
|
|||
|---|---|---|---|
|
#18+
Сахават Юсифовне понял про директории и т.д. я имел в виду коллизию типа "концепция поменялась" подразумевая ее "в общем", конечно :) ИМХО в парадигме ее разрешения: Сахават Юсифовменяются ии удаляются и пользовательские грамотные пользователи отказываются вести и поддерживать локальные системы-модификации-настройки, зная, что их могут грухнуть в любой момент. они скорее согласятся с ограничениями существующих "родительских систем", оставляя ответственность за расширение их функционала и их адаптацию под реальные нужды на разработчике (владельце). тогда Какой тогда смысл затевать сложную "глубоко эшелонированную" многослойную систему с гибкими возможностями для пользователей, если ей будут пользоваться только доверчивые ньюбиз. после апдейта все нюбиз разочарованно подсчитывают впустую потраченные усилия и становятся эдвенсд... ------------- в общем, здравомыслящий опытный пользователь не будет создавать свои сущности - будет использовать только дефолтные, предусмотреннные разработчиком. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2009, 18:35 |
|
||
|
Возможность Создание сущностей пользователем
|
|||
|---|---|---|---|
|
#18+
proposed amendment, Это офтоп. Проблема не в том зачем. Проблема в том как. Смысл в этом есть. Смыслов много можно найти один из них не знание предметной области программистом. И не знание пользователем sql. Это просто некоторый компромисс. Добавить немного гибкости системе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2009, 18:50 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=35912733&tid=1543338]: |
0ms |
get settings: |
7ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
170ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
| others: | 220ms |
| total: | 495ms |

| 0 / 0 |
