|
|
|
(_мод)
|
|||
|---|---|---|---|
|
#18+
как разруливаете целостность в ЕАВ? и насколько у вас ЕАВ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2009, 19:02 |
|
||
|
(_мод)
|
|||
|---|---|---|---|
|
#18+
На сколько я понимаю, EAB не предполагает целостности (в стандартном для БД понимании). Соответственно, рулить пытаться можно руками и далеко не везде. Например, для проверки корректности заполнения поля (из справочника) можно кодом проверить корректность. При удалении записи из справочника - тоже можно пробежать по всем "аля связанным" таблицам и проверить наличие удаляемых данных. Но, проверки типа NOT NULL реализовать не удастся, в силу специфики EAB. Возможны только корявые потуги. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2009, 10:30 |
|
||
|
(_мод)
|
|||
|---|---|---|---|
|
#18+
KOT MATPOCKuHНа сколько я понимаю, EAB не предполагает целостности (в стандартном для БД понимании). Соответственно, рулить пытаться можно руками и далеко не везде. Например, для проверки корректности заполнения поля (из справочника) можно кодом проверить корректность. При удалении записи из справочника - тоже можно пробежать по всем "аля связанным" таблицам и проверить наличие удаляемых данных. Но, проверки типа NOT NULL реализовать не удастся, в силу специфики EAB. Возможны только корявые потуги. Ну NULL там по определению не может быть. :) А целостность я имею ввиду вот что - запретить "машине" состоять и "человека" и "яичницы". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2009, 12:06 |
|
||
|
(_мод)
|
|||
|---|---|---|---|
|
#18+
> как разруливаете целостность в ЕАВ? Мне тоже было бы интересно выслушать точку зрения г-на _мод. Пара своих соображений, если не возражаете. Два аспекта задачи: техническая целостность и семантическая целостность. С технической все понятно, стандартные инструменты. Вот с семантической все плохо. Собственно, это и есть основная причина, по которой я жутко не люблю Тенцера и его апологетов: именно с его подачи расплодились полчища дебилов и их гениально кривые решения. Коль скоро нужна семантическая целостность, нужны структуры данных, которые бы могли ее обеспечивать. Универсального подхода нет. На самом деле задача сводится к множественной классификации, но классификация строится по более жестким правилам и делается расширяемой. Например, такую классификацию можно делать на основе тезауруса и ключевых слов. Или на основе BOM и спецификаций. Фишка в том, что для разных сущностей требуется разная классификация, причем, не обязательно, что при этом одна из них может быть поставлена в соответствие другой. Т. е. дополнительно к собственно классификаторам (это условное название, просто они идентичны классификаторам по структуре) нужна дополнительная структура данных, которая описывала бы и сущности, и их атрибуты, и правила классификации. Переходя на нормальный язык, написанное следует читать так: для обеспечения семантической целостности не реляционной структуры данных необходим набор метамоделей, которые обеспечивали бы соответствие семантических моделей моделям данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2009, 13:54 |
|
||
|
(_мод)
|
|||
|---|---|---|---|
|
#18+
guest_20040621> . Коль скоро нужна семантическая целостность, нужны структуры данных, которые бы могли ее обеспечивать. Универсального подхода нет. На самом деле задача сводится к множественной классификации, но классификация строится по более жестким правилам и делается расширяемой. Такое впечатление что я с вами 100 раз на эту тему беседовал. :) Тут вот в чем дело, для своей прогия это обеспечиваю. Есть и множественная классификаци, правила, и динамические ограничения накладываемые на динамические структуры. Но, что делать с теми которые лезут в БД минуя. Ведь у них нет такого анализатора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2009, 14:23 |
|
||
|
(_мод)
|
|||
|---|---|---|---|
|
#18+
Сахават ЮсифовА целостность я имею ввиду вот что - запретить "машине" состоять и "человека" и "яичницы".Если без изысков, на стандартном уровне, поддерживаемом большинством СУБД, типа foreign keys, то без особых проблем, IMHO. Простейший способ, завести дополнительную метаинформацию в таблице, описывающий ссылочные свойства. Простейший же пример: какому из свойств какие типы(классы) позволительны, и далее составной ключ на ( идентификатор свойства, идентификатор типа объекта(класса) ) в таблицу, непосредственно хранящую ссылочные данные. Это с одной стороны, а с другой - ссылка(foreign key) на таблицу объектов, но, опять же, не на идентификатор "объекта", а пары - ( идентификатор объекта, идентификатор типа объекта(класса) ). В результате, "машина" не сможет состоять из "яичницы", если только это явно не описано в таблице описания ссылочного свойства. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2009, 16:26 |
|
||
|
(_мод)
|
|||
|---|---|---|---|
|
#18+
> Простейший способ Да, так и есть. > Но, что делать с теми которые лезут в БД минуя. Ведь у них нет такого анализатора. Бить по шаловливым ручонкам и не давать десерта. ;) Можно, конечно, для правильно добавленных/измененных данных считать что-нибудь хитрое и записывать как атрибут, но, если табличка большая, проверка будет занимать много времени. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2009, 21:59 |
|
||
|
(_мод)
|
|||
|---|---|---|---|
|
#18+
guest_20040621> ... Получается, что ЕАВ жив. :) Добавлю всякие ограничения, умолчания на свойствах, вычислимы свойства, агрегаты и т.д. и попробую протестить на больших объемах. Если все будет ОК, то до пенсии больше не буду писать всяких гадостей, кроме алгоритмов предметной области. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2009, 00:55 |
|
||
|
(_мод)
|
|||
|---|---|---|---|
|
#18+
> Получается, что ЕАВ жив. :) Хороший вопрос. Нет, и никогда не был живым. А в сочетании с хотя бы примитивной метамоделью - это уже не EAV. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2009, 10:12 |
|
||
|
(_мод)
|
|||
|---|---|---|---|
|
#18+
guest_20040621, Конечно, ЕАВ тут один из аспектов. Я подумываю поставить галочку (ЕАВ или плоская таблица) что бы пользователь сам выбрал способ хранения данных для системных (описанных в модели) свойств и внешних ключей) Но тут сложности, при изменении модели надо будет периодически "выпрямлять" БД по мере накопления изменений. Может это и не пригодится, надо бы протестировать, но сейчас занять визуализацией связей (там получаются циклы при навигации и т.д., которых надо обойти). воще эти циклы забодали. :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2009, 10:35 |
|
||
|
(_мод)
|
|||
|---|---|---|---|
|
#18+
guest_20040621> Получается, что ЕАВ жив. :) Хороший вопрос. Нет, и никогда не был живым. А в сочетании с хотя бы примитивной метамоделью - это уже не EAV. Наверное да, но EAV - это просто подход хранения не реляционый, и совсем без метаописаний он не имеет смысла. По поводу целостности - связи (отношения между понятиями) и ограничения . К самой базе не давать доступа напрямую никак. Все обращения только через интерфейс, либо пользовательский либо программный. Попытка программистов понять нашу структуру eAV самим напрямую обычно заканчивается провалом, несмотря на наличие описания (система самоописывающая, т.е. через себя же и это несколько напрягает в понимании), и они бросают это гиблое занятия и используют процедуры или веб-службы, которые совместно с системой устанавливаются :)). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2009, 06:38 |
|
||
|
(_мод)
|
|||
|---|---|---|---|
|
#18+
Сахават Юсифовкак разруливаете целостность в ЕАВ? и насколько у вас ЕАВ? Вся переменная часть (объекты, документы, классификаторы, операции) - EAV. То, что задается моделью - обычные таблицы (например - проводки, остатки, обороты). На уроне БД никакой целостности нет. Но на уровне приложения нельзя создать "плохой" объект. Также нельзя удалить используемый объект. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2009, 13:51 |
|
||
|
(_мод)
|
|||
|---|---|---|---|
|
#18+
guest_20040621Т. е. дополнительно к собственно классификаторамнужна дополнительная структура данных, которая описывала бы и сущности, и их атрибуты, и правила классификации. Ну, собственно так и есть. Метаописание сущности содержит перечень ее атрибутов разных типов, в т.ч. и тип "ссылка на классификатор". Это описание используется и для отображения и для целостности и для навигации. При этом сами классификаторы не являются сущностями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2009, 13:58 |
|
||
|
(_мод)
|
|||
|---|---|---|---|
|
#18+
Сахават ЮсифовНо, что делать с теми которые лезут в БД минуя. Ведь у них нет такого анализатора. А они и не лезут, прав нет. Вы ведь не лезете в физическую организацию БД. Здесь то же самое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2009, 14:00 |
|
||
|
(_мод)
|
|||
|---|---|---|---|
|
#18+
guest_20040621А в сочетании с хотя бы примитивной метамоделью - это уже не EAV. Ну в общем да. Получается что уровень СУБД - фиксированный набор таблиц фиксированной стр-ры - это "физический уровень", а метаописание - это "логический уровень" прикладного разработчика. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2009, 14:05 |
|
||
|
(_мод)
|
|||
|---|---|---|---|
|
#18+
_модguest_20040621Т. е. дополнительно к собственно классификаторамнужна дополнительная структура данных, которая описывала бы и сущности, и их атрибуты, и правила классификации. Ну, собственно так и есть. Метаописание сущности содержит перечень ее атрибутов разных типов, в т.ч. и тип "ссылка на классификатор". Это описание используется и для отображения и для целостности и для навигации. При этом сами классификаторы не являются сущностями. 1. Может ли объект иметь (не иметь) свойство, которого нет (есть) в описании класса-шаблона этого объекта? 2. на какой стороне переварачиваете ЕАВ? (сервер, клиент). Все ли переварачиваете? 3. Как управляете навигацией? (Допустим, начиная с какого то узла дальше на форме не надо показывать релейшны, или надо показывать только указанные релейшны по всей глубине). Как с циклами в навигации? Как формируется паекль навигационный? Эх, посмотреть бы рожу готовой проги. :) 4. Как с дополнительными экшнами? Это хранимки или программный код? Меняете прогу саму или есть механизм вызова внешнего кода? ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2009, 15:09 |
|
||
|
(_мод)
|
|||
|---|---|---|---|
|
#18+
Сахават Юсифов, паекль = панель :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2009, 15:10 |
|
||
|
(_мод)
|
|||
|---|---|---|---|
|
#18+
Сахават Юсифов1. Может ли объект иметь (не иметь) свойство, которого нет (есть) в описании класса-шаблона этого объекта? 2. на какой стороне переварачиваете ЕАВ? (сервер, клиент). Все ли переварачиваете? 3. Как управляете навигацией? (Допустим, начиная с какого то узла дальше на форме не надо показывать релейшны, или надо показывать только указанные релейшны по всей глубине). Как с циклами в навигации? Как формируется паекль навигационный? Эх, посмотреть бы рожу готовой проги. :) 4. Как с дополнительными экшнами? Это хранимки или программный код? Меняете прогу саму или есть механизм вызова внешнего кода? ... 1. нет, но есть скрытые т.е. вычисляемые св-ва - они есть в шаблоне но не высвечиваются 2. в основном используется функция GET_ATTR('имя сущности',ID,'имя атрибута') и на сервере и на клиенте в т.ч. в select. но есть и обычные join на два-три атрибута для сортировки например 3. поскольку атрибут м.б. ссылкой на другую (или эту же) сущность, то просто переход по ссылке. ссылка выбирается из списка возможных типа Поставщик -> Договор или наоборот циклов на практике не было, но если будут, то вроде ничего страшного не д.б. Рожа проги весьма примитивная, одинаковая для всех сущностей - плата за универсализм 4 есть хранимки - вызываются динамически. есть возможность подключения самодельных модулей - там пиши что хочешь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2009, 16:09 |
|
||
|
(_мод)
|
|||
|---|---|---|---|
|
#18+
_мод, У меня получается типа этого сверху корневой тип и его объектная коллекция справа нетиповые свойства объектов из коллекции внизу табконтрол со всеми релейшнами корневого типа надо еще показать спава от гридов с релейшнами нетиповые свойства - забыл счас сделаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2009, 22:51 |
|
||
|
(_мод)
|
|||
|---|---|---|---|
|
#18+
У Сахавата налицо смешение разных понятий «класс, тип» и дурная наследственность EAV c его недоопределенностью. Никогда в один классификатор не могут попасть элементы множеств с разной структурой (структурой – слово заезженное, тут в смысле «ступени», декартова произведения на множестве всех объектах-экземплярах). На множестве объектов («экземпляров», обладающих идентичностью) могут быть введена произвольная классификация (в том числе и разными способами, потому и множественная) – классификация в смысле различных подмножеств одного множества (полных разбиений, частичных, таких сяких). Вполне представима деревом с множественным вхождением объектов. Такие классы-множества сами являются объектами, обладающими идентичностью. То есть могут быть в одном множестве с экземплярами (это _мод, у которого «классы не являются сущностями»). Но, разумеется, в другом смысле, что необходимо выделить атрибутикой таких объектов. Любое отношение (бинарное, тернарное, сякое-разэдакое) на объектах (та же спецификация) уже не является подмножеством первичного множества объектов, так как оно другой структуры. Это другое множество. Но различные одинарные проекции отношений (сечения) могут быть подмножествами и попасть в классификации. В принципе никто не мешает туда же «в классификацию» добавить и проекции по определенным элементам (например, состав объекта ДСЕ25 по отношению «Спецификация»), но их необходимо выделить атрибутивно, так как это тоже ни к каком смысле не подмножества, ну и имя отношения и роль в нем придется указать. Типы данных, свойства, объекты (экземпляры), классы это принципиально разные вещи, обращаться с ними надо по-разному. У Сахавата «тип» - это сборная солянка из всего, и отношение это сборная солянка из всего. Единица измерения, цвет (есть у него такие в списке) – это не объекты, а свойства. Классификатор объектов никогда не может быть смешан с классификатором свойств. Свойства не образуют множеств, и с ними нельзя обращаться как с множествами. Нельзя посчитать число элементов «множества свойства». Число заданных значений иногда можно посчитать (для перечислимых свойств), но это бессмысленно и совсем другое. Но можно посчитать число красных объектов. Короче, не расчищено. В топку такие конструкторы. Чтобы EAV стала работоспособной, необходимо добавить более жесткие метаструктуры и навесить атрибутику на них, чтобы потом работать со всем правильно, а не складывать Сахавата и 52. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2009, 05:36 |
|
||
|
(_мод)
|
|||
|---|---|---|---|
|
#18+
YulkaУ Сахавата налицо смешение разных понятий «класс, тип» и дурная наследственность EAV c его недоопределенностью. Сахават бы с удоволствием стер бы с словаря слова - класс, свойство, тип и т.д. Каждый понимает что хочет под этими словами. На самом деле нет никаких классов. Класс - это шаблонное видение классифициующего под который кастируются реальные объекты. В любом случае класс= (Имя, идентификатор) + {свойств для отбора объектов}. Это при классификации по существующим свойствам объектов. (Select * where имеется {свойств для отбора объектов}) Другой вид классификации - агрегирующий, классификатор является СВОЙСТВОМ для всех агрегрированных объектов, у которых изначально НЕТ такого свойства. Например Мои_Друзья(перечень идентификаторов классов и отдельных объектов). Эти два вида классифицирующих объектов составляет единый навигационный классификатор со множеством классифицирующих входов. Никогда в один классификатор не могут попасть элементы множеств с разной структурой (структурой – слово заезженное, тут в смысле «ступени», декартова произведения на множестве всех объектах-экземплярах). На множестве объектов («экземпляров», обладающих идентичностью) могут быть введена произвольная классификация (в том числе и разными способами, потому и множественная) – классификация в смысле различных подмножеств одного множества (полных разбиений, частичных, таких сяких). Вполне представима деревом с множественным вхождением объектов. Классификатор не дерево. Такие классы-множества сами являются объектами, обладающими идентичностью. То есть могут быть в одном множестве с экземплярами (это _мод, у которого «классы не являются сущностями»). Но, разумеется, в другом смысле, что необходимо выделить атрибутикой таких объектов. Любое отношение (бинарное, тернарное, сякое-разэдакое) на объектах (та же спецификация) уже не является подмножеством первичного множества объектов, так как оно другой структуры. Это другое множество. Но различные одинарные проекции отношений (сечения) могут быть подмножествами и попасть в классификации. Отнощение такой же класс как и остальные. Единственное отличие - объекты этого класса не имеют осмысленного имени. Нельзя ИД1,Работает1, чел1, цех1 ИД2,Работает2, чел2, цех2 Можно создать агрегирующий классифицирующий объект Документ и приписать к нему отношения. Т.е. ничем классификация отношений не отличается. В принципе никто не мешает туда же «в классификацию» добавить и проекции по определенным элементам (например, состав объекта ДСЕ25 по отношению «Спецификация»), но их необходимо выделить атрибутивно, так как это тоже ни к каком смысле не подмножества, ну и имя отношения и роль в нем придется указать. Проекция - динамическая классификация по свойству классификатора (свойства классификатора является фильтром в select. Любой узел графа классифицирующего является оператором Select. Типы данных, свойства, объекты (экземпляры), классы это принципиально разные вещи, обращаться с ними надо по-разному. У Сахавата «тип» - это сборная солянка из всего, и отношение это сборная солянка из всего. Это все одна и та же фигня с точки зрения возможности приведения в вид (ИД, Наименование). Единица измерения, цвет (есть у него такие в списке) – это не объекты, а свойства. Классификатор объектов никогда не может быть смешан с классификатором свойств. Свойства не образуют множеств, и с ними нельзя обращаться как с множествами. Нельзя посчитать число элементов «множества свойства». Число заданных значений иногда можно посчитать (для перечислимых свойств), но это бессмысленно и совсем другое. Но можно посчитать число красных объектов. Ну, прогеры привыкли, что есть класс "Color"и справочник "Едизм" с несколькими свойствами. Короче, не расчищено. В топку такие конструкторы. Чтобы EAV стала работоспособной, необходимо добавить более жесткие метаструктуры и навесить атрибутику на них, чтобы потом работать со всем правильно, а не складывать Сахавата и 52. Дык, это дело прикладника, а не проги моей. Пусть опишет правильно. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2009, 09:51 |
|
||
|
(_мод)
|
|||
|---|---|---|---|
|
#18+
Сахават ЮсифовУ меня получается типа этого Почти похоже. Для меня Накладные - это объекты супертипа Событие (или операция, т.е. то что имеет дату-время). Способ отображения - простой список с возможность раскрыть форму одной операции, внутри видим свойство -список товаров - раскрываем ну и т.д Глубина вложенности м.б. не ограничена. зя у меня классификаторы всегда иерархические по определению ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2009, 11:45 |
|
||
|
(_мод)
|
|||
|---|---|---|---|
|
#18+
YulkaЧтобы EAV стала работоспособной, необходимо добавить более жесткие метаструктуры и навесить атрибутику на них, чтобы потом работать со всем правильно Я бы сказал наоборот: для реализации метаструктуры можно применить EAV (и не только - есть и другие методы). Т.е. под цель подбираются средства. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2009, 11:48 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=35804070&tid=1542394]: |
0ms |
get settings: |
6ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
169ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
85ms |
get tp. blocked users: |
1ms |
| others: | 205ms |
| total: | 503ms |

| 0 / 0 |
