powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / (_мод)
25 сообщений из 145, страница 1 из 6
(_мод)
    #35802729
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как разруливаете целостность в ЕАВ?
и насколько у вас ЕАВ?
...
Рейтинг: 0 / 0
(_мод)
    #35803249
KOT MATPOCKuH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На сколько я понимаю, EAB не предполагает целостности (в стандартном для БД понимании).
Соответственно, рулить пытаться можно руками и далеко не везде.
Например, для проверки корректности заполнения поля (из справочника) можно кодом проверить корректность.
При удалении записи из справочника - тоже можно пробежать по всем "аля связанным" таблицам и проверить наличие удаляемых данных.
Но, проверки типа NOT NULL реализовать не удастся, в силу специфики EAB. Возможны только корявые потуги.
...
Рейтинг: 0 / 0
(_мод)
    #35803311
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KOT MATPOCKuHНа сколько я понимаю, EAB не предполагает целостности (в стандартном для БД понимании).
Соответственно, рулить пытаться можно руками и далеко не везде.
Например, для проверки корректности заполнения поля (из справочника) можно кодом проверить корректность.
При удалении записи из справочника - тоже можно пробежать по всем "аля связанным" таблицам и проверить наличие удаляемых данных.
Но, проверки типа NOT NULL реализовать не удастся, в силу специфики EAB. Возможны только корявые потуги.
Ну NULL там по определению не может быть. :)
А целостность я имею ввиду вот что - запретить "машине" состоять и "человека" и "яичницы".
...
Рейтинг: 0 / 0
(_мод)
    #35803395
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> как разруливаете целостность в ЕАВ?

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

Два аспекта задачи: техническая целостность и семантическая целостность. С технической все понятно, стандартные инструменты. Вот с семантической все плохо. Собственно, это и есть основная причина, по которой я жутко не люблю Тенцера и его апологетов: именно с его подачи расплодились полчища дебилов и их гениально кривые решения.

Коль скоро нужна семантическая целостность, нужны структуры данных, которые бы могли ее обеспечивать. Универсального подхода нет.

На самом деле задача сводится к множественной классификации, но классификация строится по более жестким правилам и делается расширяемой. Например, такую классификацию можно делать на основе тезауруса и ключевых слов. Или на основе BOM и спецификаций. Фишка в том, что для разных сущностей требуется разная классификация, причем, не обязательно, что при этом одна из них может быть поставлена в соответствие другой. Т. е. дополнительно к собственно классификаторам (это условное название, просто они идентичны классификаторам по структуре) нужна дополнительная структура данных, которая описывала бы и сущности, и их атрибуты, и правила классификации. Переходя на нормальный язык, написанное следует читать так: для обеспечения семантической целостности не реляционной структуры данных необходим набор метамоделей, которые обеспечивали бы соответствие семантических моделей моделям данных.
...
Рейтинг: 0 / 0
(_мод)
    #35803427
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_20040621> .

Коль скоро нужна семантическая целостность, нужны структуры данных, которые бы могли ее обеспечивать. Универсального подхода нет.

На самом деле задача сводится к множественной классификации, но классификация строится по более жестким правилам и делается расширяемой.
Такое впечатление что я с вами 100 раз на эту тему беседовал. :)
Тут вот в чем дело, для своей прогия это обеспечиваю. Есть и множественная классификаци, правила, и динамические ограничения накладываемые на динамические структуры.
Но, что делать с теми которые лезут в БД минуя. Ведь у них нет такого анализатора.
...
Рейтинг: 0 / 0
(_мод)
    #35803554
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сахават ЮсифовА целостность я имею ввиду вот что - запретить "машине" состоять и "человека" и "яичницы".Если без изысков, на стандартном уровне, поддерживаемом большинством СУБД, типа foreign keys, то без особых проблем, IMHO.
Простейший способ, завести дополнительную метаинформацию в таблице, описывающий ссылочные свойства. Простейший же пример: какому из свойств какие типы(классы) позволительны, и далее составной ключ на ( идентификатор свойства, идентификатор типа объекта(класса) ) в таблицу, непосредственно хранящую ссылочные данные. Это с одной стороны, а с другой - ссылка(foreign key) на таблицу объектов, но, опять же, не на идентификатор "объекта", а пары - ( идентификатор объекта, идентификатор типа объекта(класса) ). В результате, "машина" не сможет состоять из "яичницы", если только это явно не описано в таблице описания ссылочного свойства.
...
Рейтинг: 0 / 0
(_мод)
    #35803610
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChA...
Почти так и сделано
...
Рейтинг: 0 / 0
(_мод)
    #35803832
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Простейший способ

Да, так и есть.

> Но, что делать с теми которые лезут в БД минуя. Ведь у них нет такого анализатора.

Бить по шаловливым ручонкам и не давать десерта. ;) Можно, конечно, для правильно добавленных/измененных данных считать что-нибудь хитрое и записывать как атрибут, но, если табличка большая, проверка будет занимать много времени.
...
Рейтинг: 0 / 0
(_мод)
    #35803974
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_20040621> ...
Получается, что ЕАВ жив. :)
Добавлю всякие ограничения, умолчания на свойствах, вычислимы свойства, агрегаты и т.д. и попробую протестить на больших объемах.
Если все будет ОК, то до пенсии больше не буду писать всяких гадостей, кроме алгоритмов предметной области.
...
Рейтинг: 0 / 0
(_мод)
    #35804063
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Получается, что ЕАВ жив. :)

Хороший вопрос. Нет, и никогда не был живым. А в сочетании с хотя бы примитивной метамоделью - это уже не EAV.
...
Рейтинг: 0 / 0
(_мод)
    #35804070
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_20040621,

Конечно, ЕАВ тут один из аспектов. Я подумываю поставить галочку (ЕАВ или плоская таблица) что бы пользователь сам выбрал способ хранения данных для системных (описанных в модели) свойств и внешних ключей) Но тут сложности, при изменении модели надо будет периодически "выпрямлять" БД по мере накопления изменений. Может это и не пригодится, надо бы протестировать, но сейчас занять визуализацией связей (там получаются циклы при навигации и т.д., которых надо обойти). воще эти циклы забодали. :(
...
Рейтинг: 0 / 0
(_мод)
    #35804803
Mainframe_старый
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_20040621> Получается, что ЕАВ жив. :)

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

Наверное да, но EAV - это просто подход хранения не реляционый, и совсем без метаописаний он не имеет смысла.
По поводу целостности - связи (отношения между понятиями) и ограничения . К самой базе не давать доступа напрямую никак. Все обращения только через интерфейс, либо пользовательский либо программный. Попытка программистов понять нашу структуру eAV самим напрямую обычно заканчивается провалом, несмотря на наличие описания (система самоописывающая, т.е. через себя же и это несколько напрягает в понимании), и они бросают это гиблое занятия и используют процедуры или веб-службы, которые совместно с системой устанавливаются :)).
...
Рейтинг: 0 / 0
(_мод)
    #35805662
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сахават Юсифовкак разруливаете целостность в ЕАВ?
и насколько у вас ЕАВ?
Вся переменная часть (объекты, документы, классификаторы, операции) - EAV. То, что задается моделью - обычные таблицы (например - проводки, остатки, обороты).
На уроне БД никакой целостности нет. Но на уровне приложения нельзя создать "плохой" объект.
Также нельзя удалить используемый объект.
...
Рейтинг: 0 / 0
(_мод)
    #35805689
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_20040621Т. е. дополнительно к собственно классификаторамнужна дополнительная структура данных, которая описывала бы и сущности, и их атрибуты, и правила классификации.
Ну, собственно так и есть. Метаописание сущности содержит перечень ее атрибутов разных типов, в т.ч. и тип "ссылка на классификатор". Это описание используется и для отображения и для целостности и для навигации. При этом сами классификаторы не являются сущностями.
...
Рейтинг: 0 / 0
(_мод)
    #35805698
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сахават ЮсифовНо, что делать с теми которые лезут в БД минуя. Ведь у них нет такого анализатора.
А они и не лезут, прав нет. Вы ведь не лезете в физическую организацию БД. Здесь то же самое.
...
Рейтинг: 0 / 0
(_мод)
    #35805714
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_20040621А в сочетании с хотя бы примитивной метамоделью - это уже не EAV.
Ну в общем да. Получается что уровень СУБД - фиксированный набор таблиц фиксированной стр-ры - это "физический уровень", а метаописание - это "логический уровень" прикладного разработчика.
...
Рейтинг: 0 / 0
(_мод)
    #35805921
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_модguest_20040621Т. е. дополнительно к собственно классификаторамнужна дополнительная структура данных, которая описывала бы и сущности, и их атрибуты, и правила классификации.
Ну, собственно так и есть. Метаописание сущности содержит перечень ее атрибутов разных типов, в т.ч. и тип "ссылка на классификатор". Это описание используется и для отображения и для целостности и для навигации. При этом сами классификаторы не являются сущностями.
1. Может ли объект иметь (не иметь) свойство, которого нет (есть) в описании класса-шаблона этого объекта?
2. на какой стороне переварачиваете ЕАВ? (сервер, клиент). Все ли переварачиваете?
3. Как управляете навигацией? (Допустим, начиная с какого то узла дальше на форме не надо показывать релейшны, или надо показывать только указанные релейшны по всей глубине). Как с циклами в навигации? Как формируется паекль навигационный?
Эх, посмотреть бы рожу готовой проги. :)
4. Как с дополнительными экшнами? Это хранимки или программный код? Меняете прогу саму или есть механизм вызова внешнего кода?
...
...
Рейтинг: 0 / 0
(_мод)
    #35805926
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сахават Юсифов,
паекль = панель :)
...
Рейтинг: 0 / 0
(_мод)
    #35806131
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сахават Юсифов1. Может ли объект иметь (не иметь) свойство, которого нет (есть) в описании класса-шаблона этого объекта?
2. на какой стороне переварачиваете ЕАВ? (сервер, клиент). Все ли переварачиваете?
3. Как управляете навигацией? (Допустим, начиная с какого то узла дальше на форме не надо показывать релейшны, или надо показывать только указанные релейшны по всей глубине). Как с циклами в навигации? Как формируется паекль навигационный?
Эх, посмотреть бы рожу готовой проги. :)
4. Как с дополнительными экшнами? Это хранимки или программный код? Меняете прогу саму или есть механизм вызова внешнего кода?
...
1. нет, но есть скрытые т.е. вычисляемые св-ва - они есть в шаблоне но не высвечиваются
2. в основном используется функция GET_ATTR('имя сущности',ID,'имя атрибута') и на сервере и на клиенте в т.ч. в select. но есть и обычные join на два-три атрибута для сортировки например
3. поскольку атрибут м.б. ссылкой на другую (или эту же) сущность, то просто переход по ссылке.
ссылка выбирается из списка возможных типа Поставщик -> Договор или наоборот
циклов на практике не было, но если будут, то вроде ничего страшного не д.б.
Рожа проги весьма примитивная, одинаковая для всех сущностей - плата за универсализм
4 есть хранимки - вызываются динамически. есть возможность подключения самодельных модулей - там пиши что хочешь
...
Рейтинг: 0 / 0
(_мод)
    #35806970
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_мод,
У меня получается типа этого
сверху корневой тип и его объектная коллекция
справа нетиповые свойства объектов из коллекции
внизу табконтрол со всеми релейшнами корневого типа
надо еще показать спава от гридов с релейшнами нетиповые свойства - забыл счас сделаю
...
Рейтинг: 0 / 0
(_мод)
    #35807134
Yulka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У Сахавата налицо смешение разных понятий «класс, тип» и дурная наследственность EAV c его недоопределенностью.

Никогда в один классификатор не могут попасть элементы множеств с разной структурой (структурой – слово заезженное, тут в смысле «ступени», декартова произведения на множестве всех объектах-экземплярах).

На множестве объектов («экземпляров», обладающих идентичностью) могут быть введена произвольная классификация (в том числе и разными способами, потому и множественная) – классификация в смысле различных подмножеств одного множества (полных разбиений, частичных, таких сяких).
Вполне представима деревом с множественным вхождением объектов.

Такие классы-множества сами являются объектами, обладающими идентичностью. То есть могут быть в одном множестве с экземплярами (это _мод, у которого «классы не являются сущностями»). Но, разумеется, в другом смысле, что необходимо выделить атрибутикой таких объектов.

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

В принципе никто не мешает туда же «в классификацию» добавить и проекции по определенным элементам (например, состав объекта ДСЕ25 по отношению «Спецификация»), но их необходимо выделить атрибутивно, так как это тоже ни к каком смысле не подмножества, ну и имя отношения и роль в нем придется указать.


Типы данных, свойства, объекты (экземпляры), классы это принципиально разные вещи, обращаться с ними надо по-разному. У Сахавата «тип» - это сборная солянка из всего, и отношение это сборная солянка из всего.

Единица измерения, цвет (есть у него такие в списке) – это не объекты, а свойства. Классификатор объектов никогда не может быть смешан с классификатором свойств. Свойства не образуют множеств, и с ними нельзя обращаться как с множествами. Нельзя посчитать число элементов «множества свойства». Число заданных значений иногда можно посчитать (для перечислимых свойств), но это бессмысленно и совсем другое. Но можно посчитать число красных объектов.

Короче, не расчищено. В топку такие конструкторы.

Чтобы EAV стала работоспособной, необходимо добавить более жесткие метаструктуры и навесить атрибутику на них, чтобы потом работать со всем правильно, а не складывать Сахавата и 52.
...
Рейтинг: 0 / 0
(_мод)
    #35807302
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YulkaУ Сахавата налицо смешение разных понятий «класс, тип» и дурная наследственность EAV c его недоопределенностью.

Сахават бы с удоволствием стер бы с словаря слова - класс, свойство, тип и т.д. Каждый понимает что хочет под этими словами.
На самом деле нет никаких классов. Класс - это шаблонное видение классифициующего под который кастируются реальные объекты.
В любом случае класс= (Имя, идентификатор) + {свойств для отбора объектов}. Это при классификации по существующим свойствам объектов. (Select * where имеется {свойств для отбора объектов})
Другой вид классификации - агрегирующий, классификатор является СВОЙСТВОМ для всех агрегрированных объектов, у которых изначально НЕТ такого свойства. Например Мои_Друзья(перечень идентификаторов классов и отдельных объектов).
Эти два вида классифицирующих объектов составляет единый навигационный классификатор со множеством классифицирующих входов.

Никогда в один классификатор не могут попасть элементы множеств с разной структурой (структурой – слово заезженное, тут в смысле «ступени», декартова произведения на множестве всех объектах-экземплярах).

На множестве объектов («экземпляров», обладающих идентичностью) могут быть введена произвольная классификация (в том числе и разными способами, потому и множественная) – классификация в смысле различных подмножеств одного множества (полных разбиений, частичных, таких сяких).
Вполне представима деревом с множественным вхождением объектов.

Классификатор не дерево.

Такие классы-множества сами являются объектами, обладающими идентичностью. То есть могут быть в одном множестве с экземплярами (это _мод, у которого «классы не являются сущностями»). Но, разумеется, в другом смысле, что необходимо выделить атрибутикой таких объектов.

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

Отнощение такой же класс как и остальные. Единственное отличие - объекты этого класса не имеют осмысленного имени. Нельзя
ИД1,Работает1, чел1, цех1
ИД2,Работает2, чел2, цех2

Можно создать агрегирующий классифицирующий объект Документ и приписать к нему отношения. Т.е. ничем классификация отношений не отличается.

В принципе никто не мешает туда же «в классификацию» добавить и проекции по определенным элементам (например, состав объекта ДСЕ25 по отношению «Спецификация»), но их необходимо выделить атрибутивно, так как это тоже ни к каком смысле не подмножества, ну и имя отношения и роль в нем придется указать.


Проекция - динамическая классификация по свойству классификатора (свойства классификатора является фильтром в select. Любой узел графа классифицирующего является оператором Select.

Типы данных, свойства, объекты (экземпляры), классы это принципиально разные вещи, обращаться с ними надо по-разному. У Сахавата «тип» - это сборная солянка из всего, и отношение это сборная солянка из всего.

Это все одна и та же фигня с точки зрения возможности приведения в вид (ИД, Наименование).

Единица измерения, цвет (есть у него такие в списке) – это не объекты, а свойства. Классификатор объектов никогда не может быть смешан с классификатором свойств. Свойства не образуют множеств, и с ними нельзя обращаться как с множествами. Нельзя посчитать число элементов «множества свойства». Число заданных значений иногда можно посчитать (для перечислимых свойств), но это бессмысленно и совсем другое. Но можно посчитать число красных объектов.

Ну, прогеры привыкли, что есть класс "Color"и справочник "Едизм" с несколькими свойствами.
Короче, не расчищено. В топку такие конструкторы.

Чтобы EAV стала работоспособной, необходимо добавить более жесткие метаструктуры и навесить атрибутику на них, чтобы потом работать со всем правильно, а не складывать Сахавата и 52.

Дык, это дело прикладника, а не проги моей. Пусть опишет правильно. :)
...
Рейтинг: 0 / 0
(_мод)
    #35807653
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сахават ЮсифовУ меня получается типа этого
Почти похоже. Для меня Накладные - это объекты супертипа Событие (или операция, т.е. то что имеет дату-время). Способ отображения - простой список с возможность раскрыть форму одной операции, внутри видим свойство -список товаров - раскрываем ну и т.д Глубина вложенности м.б. не ограничена.
зя у меня классификаторы всегда иерархические по определению
...
Рейтинг: 0 / 0
(_мод)
    #35807662
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YulkaЧтобы EAV стала работоспособной, необходимо добавить более жесткие метаструктуры и навесить атрибутику на них, чтобы потом работать со всем правильно
Я бы сказал наоборот: для реализации метаструктуры можно применить EAV (и не только - есть и другие методы). Т.е. под цель подбираются средства.
...
Рейтинг: 0 / 0
(_мод)
    #35807904
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_модциклов на практике не было, но если будут, то вроде ничего страшного не д.б.
У меня бывали циклы в похожей ситуации. Ничего страшного не было.
...
Рейтинг: 0 / 0
25 сообщений из 145, страница 1 из 6
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / (_мод)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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