powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Прошу немного критики по структуре БД
25 сообщений из 25, страница 1 из 1
Прошу немного критики по структуре БД
    #36313499
Тифа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.
Недавно решил заняться выдумкой структуры базы, нового что-то вряд ли придумал, поэтому хотелось бы узнать мнения. СУБД оракл 9 версия.
Идея в следующем: хочется сделать гибрид еав и рм для использования плюсов обоих подходов и избежать минусы по максимуму.
Предполагаются следующие таблицы в упрощенном варианте
1. сущности: наименование сущности (имя таблицы) (пк), ключевые поля
2. атрибуты: ид сущности (пк1 фк на сущности), наименование атрибута (имя столбца в таблице)(пк2), тип (строка, число, дата, мб какой-нибудь лоб), табличный атрибут или нет
3. значения атрибутов (еав таблица): сущность (пк1), атрибут (пк2), ид объекта1 (пк3), ид объекта2 (пк4), значение (не уникальный индекс вместе с сущностью и атрибутом)
Для каждого объекта будет создана реляционная таблица с набором обязательных, необходимых для осуществления поиска данных, фк (табличные атрибуты), а также доп. атрибуты которые могут быть или не быть заполнены, поиск по которым не так важен (хотя и возможен), информация о родительских объектах (если она отличается от родителя) и т.д.
Т.е. будут заполняться таблицы сущностей и атрибутов сущностей, табличные значения будут храниться в таблице, доп. значения будут храниться в таблице еав.
Таблиц еав предполагается несколько, разбиты по типам: число, дата, строка (для экономии места задумано 6 таблиц для строк, т.к. считаю не резонно под значения, допустим ИНН, забивать 4000 символов).
Долго решал, как быть с идентификаторами объектов, стандартная модель еав предполагает уникальный ид для всех объектов, рм же позволяет делать сложные ид наделенные смыслом состоящие из нескольких полей. Возьмем за объект сущность у нее ид наименование сущности, можно сделать ид цифру и тогда мы будем иметь не совсем нужный ид не дающий смысловой нагрузки, к которому нельзя привязаться в запросах без обращения к таблице сущностей. Возьмем за объект атрибут его ид составной наименования сущности и атрибута, опять же если сделаем цифровой ид, получится чтобы получить допустим значение атрибута зная сущность атрибут и ид объекта нужно сделать запрос к таблице сущностей, сделать запрос к таблице атрибутов, сделать запрос к таблице значений итого 3 запроса заместо одного. Другой пример существует объект, у которого есть атрибут пользователь, который что-нибудь сделал с этим объектом, логин это не только уникальный ид но и много говорящий (у нас на работе в него зашивают не только ФИО человека, но и принадлежность к филиалу, и версию программы в которой он работает, и это не говоря уже о технических пользователях по которым по логину видно для чего вообще он объект трогал) если я буду хранить цифровой ид в таблице, мне необходимо будет постоянно делать запросы на получение этого логина, конечно я еще буду получать и другую полезную инфу этими запросами, но она может оказаться и не нужна. В итоге получается, что для еав нужно ограниченное кол-во ид объекта, а для рм наоборот ид может быть несколько. Взвесив и то и другое, решил завязаться на два ид и соответственно расширить таблицу еав, если у сущности один ключевой атрибут буду писать нулл в ид2. Два ид для многого хватит, а если где не хватит можно перейти на обобщающий цифровой код (получается, не всегда он будет нужен).
Конечно, думал и над другим решением, можно сделать внешний и внутренний ключ, внешний ключ будет цифровой и уникальный для всех объектов, а внутренний будет осмысленный. Тогда таблицы можно будет связывать как по внешнему ключу, так и по внутреннему, а в таблице еав будет использоваться внешний ключ.
Обработка объектов. Сделал пакет который делает стандартные дмл операции над объектами динамически, т.е. получает объект, делает новый, удаляет и изменяет. Загруженный объект будет хранится в пл\скл таблице объект(сущность)(ид1)(ид2).тип(атрибут), и обновляться будет только при изменении. С этим тоже есть вопрос, начиная хранить данные в памяти, будут уменьшены кол-во запросов. К примеру, есть сущность и есть родительская сущность, для каждого объекта нужно выводить инфу по родителю, итого, если пользователь запрашивает данные из базы, придется для каждого объекта сделать запрос, хотя может всего один родитель используется для этих данных, проще информацию запомнить и выкидывать ее как можно быстрее. С одной стороны это увеличит скорость и, по опыту знаю, что может увеличить сильно. С другой стороны расплачиваться придется ресурсами, вот здесь и встает вопрос, сильные ли будут затраты, конечно все зависит от кол-ва пользователей и кол-вом получаемых данных, но можно ли примерно сказать для средней системы?
Были вариации грузить в память не все, а только самое необходимое как вариант.
Оставлять в памяти планируется только для интерфейсов, для расчетов все можно чистить после обработки.
Также встает проблема еав с целостностью, выше я написал, что фк хотелось бы сделать табличным атрибутом, но это не всегда будет нужно, бывают и не очень полезные фк, которые будут заполняться для 1 объекта из 100, а то и менее нужные, но все равно фк. С одной стороны можно и оставить его в основной таблице, а можно скинуть в еав таблицу. Есть ли какие-нибудь пути к улучшению целостности? Пока для меня проблема при одновременном удалении родителя и вставки ребенка, возможно нужно лочить родителя пока идет вставка, но могут возникнуть дедлоки, да и бесполезно вставлять запись если через секунду она будет удалена.
Вроде пока все, а то и так много понаписал, заранее спасибо за комментарии
...
Рейтинг: 0 / 0
Прошу немного критики по структуре БД
    #36313846
aston
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это что, очередной мегапроект из серии "вся система в 3-х табличках с автоматически формируемым интерфейсом"?
...
Рейтинг: 0 / 0
Прошу немного критики по структуре БД
    #36314025
Toshik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пока дочитаешь до конца выпускается из виду начало. Вы сделайте картинку структуры, а мы уж с удовольствием покритикуем.
...
Рейтинг: 0 / 0
Прошу немного критики по структуре БД
    #36314213
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тифа, Вы занимаетесь абсолютной хренью. Ощущение, что Вы собрали весь мусор рунета.
...
Рейтинг: 0 / 0
Прошу немного критики по структуре БД
    #36314536
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_20040621Тифа, Вы занимаетесь абсолютной хренью. Ощущение, что Вы собрали весь мусор рунета.Задумка мож и неплохая..... но реализация будет...эээ..... (политкорректно) перегруженная и усложненная. Посему малоинтересная.

Тем не менее я убежден, что именно за такими принципами будущее учета различной бизнес-информации.
...
Рейтинг: 0 / 0
Прошу немного критики по структуре БД
    #36314606
SokolNik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSV,
я сделал такую вещь и намного сильнее чем тут описано (мощный генератор интерфейса пользователя, описание бизнес объектов, встроенные языки программирования методов и событий и т.д.), пытался показать на C# форуме - обсмеяли студенты.
...
Рейтинг: 0 / 0
Прошу немного критики по структуре БД
    #36314683
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SokolNikLSV,
я сделал такую вещь и намного сильнее чем тут описано (мощный генератор интерфейса пользователя, описание бизнес объектов, встроенные языки программирования методов и событий и т.д.), пытался показать на C# форуме - обсмеяли студенты.поделишься?
...
Рейтинг: 0 / 0
Прошу немного критики по структуре БД
    #36314905
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Задумка мож и неплохая.....

Задумка стандартная - универсальная база данных.

> но реализация будет...эээ..... (политкорректно) перегруженная и усложненная

Как раз описанный вариант достаточно прост. Но от этого ни интереснее, ни полезнее он не стал.

> за такими принципами будущее учета различной бизнес-информации

Чушь. Создавать такие корявые структуры не перестанут никогда: спасибо Тенцеру. Но в описанном виде никто в здравом уме применять их не будет ни в одном приложении сложнее записной книжки.
...
Рейтинг: 0 / 0
Прошу немного критики по структуре БД
    #36315376
SokolNik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_20040621,

еав абсолютная ерунда ( в связке с СКЛ серверем имею ввиду), можно использовать только для динамический атрибутов (и то по мере накопления статистики надо перевести в нормальную структуру). Главное ИМЕТЬ И УМЕТЬ работать с метаданными, в СКЛ серверах (я в основном с МС СКЛ работаю) их не так много, потому надо иметь свой репозитарий метаданных (допусти фиг поймешь из каких сущностей и связей состоит устойчивый бизнес объект, какие у него методы и события).
ОРМ в тепершнем виде полная фигня, это просто перевод структуры БД в структуры классов, а агрегирующие классы все равно ручками надо, значимые ассоциации и ссылочные перемещаны и т.д.
...
Рейтинг: 0 / 0
Прошу немного критики по структуре БД
    #36315386
SokolNik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Naf,

скоро будет усеченная демо версия (сущностей на 50), выложу
плохой графический редактор типов и макротипов, вот бы найти готовый где на Net, а так пользуюсь MSAGL а это очень примитивная штука :(
...
Рейтинг: 0 / 0
Прошу немного критики по структуре БД
    #36315730
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Совершенно справедливо, SokolNik.

Три основные проблемы: метамодель, семантическая модель, переход от вспомогательной структуры к реляционной. Проблема не в том, чтобы размазать что-то по таблицам, это как раз просто. Собрать это потом в реляционную структуру - нетривизиальная задача.
...
Рейтинг: 0 / 0
Прошу немного критики по структуре БД
    #36315932
Тифа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по порядку
astonЭто что, очередной мегапроект из серии "вся система в 3-х табличках с автоматически формируемым интерфейсом"?
нет, в самом начале написал что это гибрид, еав хотелось бы использовать как полезное универсальное дополнение.
И пока речь идет о хранении данных, а не об интерфейсе, конечно интерфейс предполагается и вполне возможно что динамический
ToshikПока дочитаешь до конца выпускается из виду начало. Вы сделайте картинку структуры, а мы уж с удовольствием покритикуем.
В каком виде хотелось бы увидеть? Пока структура сама в задумке и частичной реализации. Просто если нарисую текущую структуру без сущностей будет опять похоже на чистый еав, что будет сбивать с толку.
guest_20040621Тифа, Вы занимаетесь абсолютной хренью. Ощущение, что Вы собрали весь мусор рунета.
Если честно не много читал по инету про структуры бд, читал в основном про чистые модели еав и рм, может и стоит почитать побольше, но где видел там все одно и тоже, либо стандарт и все говорят что нечего интересного либо еав и все говорят что "хрень", читать устаю
LSVЗадумка мож и неплохая..... но реализация будет...эээ..... (политкорректно) перегруженная и усложненная. Посему малоинтересная.
реализовать наоборот пытаюсь прозрачнее и как ниже написали что все по простому, хотя сверху описана только основа, сверху наложен многое типа универсального аудита, описание связей между объектами, наследование и др.
SokolNikеав абсолютная ерунда ( в связке с СКЛ серверем имею ввиду), можно использовать только для динамический атрибутов (и то по мере накопления статистики надо перевести в нормальную структуру). Главное ИМЕТЬ И УМЕТЬ работать с метаданными, в СКЛ серверах (я в основном с МС СКЛ работаю) их не так много, потому надо иметь свой репозитарий метаданных (допусти фиг поймешь из каких сущностей и связей состоит устойчивый бизнес объект, какие у него методы и события).
ОРМ в тепершнем виде полная фигня, это просто перевод структуры БД в структуры классов, а агрегирующие классы все равно ручками надо, значимые ассоциации и ссылочные перемещаны и т.д.
ну тут позвольте не согласиться что еав уж такая абсолютная ерунда. вернемся опять к сущности пользователь, в базе можно хранить сотни настроек для каждого пользователя, от запоминания папки из которой он грузит файлы до настройки печати документов. т.е. по вашему надо создать таблицу с несколькими сотнями полями и забивать в них настройки пользователей? при этом постояно добавлять туда новые при появлении каждой новой настройке? или сделать еав пользователь настройка значение?
и это не только пользователи, к примеру у платежного документа есть только для печати около 150 атрибутов (извиняюсь вспомнить точное кол-во не могу), а заполняется обычно в среднем 40%, отсюда вопрос зачем иметь 150 полей, если они не нужны (точнее нужны, но редко), или предложите разделять 1 единую сущность на 5-10 подсущностей и заполнять по мере необходимости, но по мне дак это не далеко от разделения на еав.

С репозитарием согласен, у оракла он конечно и так есть, вполне не плохой и можно много выделить из него, но новых атрибутов там не добавить. Вприципе и моя структура в простейшем виде содержит описание сущностей атрибутов и их связей.
...
Рейтинг: 0 / 0
Прошу немного критики по структуре БД
    #36315962
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тифа ну тут позвольте не согласиться что еав уж такая абсолютная ерунда.Нет это не ерунда - это удар по почкам производительности. Причем удар фатальный, неисправимый никакими усилиями ДБА
То есть я бы сказал - еав это ДОРОГО. Хотя для малоиспользуемых частей это может быть ПРИЕМЛИМО.
...
Рейтинг: 0 / 0
Прошу немного критики по структуре БД
    #36315969
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> не много читал по инету про структуры бд

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

Чтобы структура данных не была мусорной корзиной, можно либо вписать ее в метамодель реляционной СУБД (что бессмысленно, поскольку предполагает реализацию в виде реляционной структуры), либо использовать метаметамодель, общую для реляционной метамодели и самодельной, либо - что проще - использовать маппинг реляционной метамодели и самодельной посредством некоторой дополнительной модели.
...
Рейтинг: 0 / 0
Прошу немного критики по структуре БД
    #36316351
aston
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы похоже запутались в предназначении EAV.

Дело даже не в дороговизне решения EAV. Если бабок много и это можно решить.
Система хранения типа EAV предназначена для организации, как выразился guest_20040621, в организации мусорок. К данным этих мусорок не предъявляются бизнес-требования по обеспечению согласованности и целостности данных (декларативным образом их в EAV принципиально не обеспечить). Ваш пример про "настройки пользователя" - это и есть та самая мусорка.

З.Ы. Состав атрибутов реальных объектов "из жизни" много проще, чем вы думаете.
Например, у самого "большого" платежного документа (платежного проручения) их всего то не больше 20 вместо мифических 150. И из этих 20 я не вижу ни одного, который можно было бы запихнуть в EAV структуру, ибо все они требуют контроля целостности и согласованности.
...
Рейтинг: 0 / 0
Прошу немного критики по структуре БД
    #36317767
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
astonВы похоже запутались в предназначении EAV.
У EAV два назначения:
1 минимизировать кодирование при разработке
2 построение систем-конструкторов для конечных пользователей
...
Рейтинг: 0 / 0
Прошу немного критики по структуре БД
    #36318037
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_20040621Ничего не потеряли, ибо пишут по большей части ахинею.Сказал как отрезал А вот дальше выбился из стиля. Надо было продолжить типа так для нормальной работы тебе понадобятся вьюхи на свою универсальную структуру. А там где вьюхи там и до нормальных таблиц недалеко.

Тифа отсюда вопрос зачем иметь 150 полей, если они не нужныХранение пустых значений во всех известных мне базах почти ничего не стоит.
Тифа базе можно хранить сотни настроек для каждого пользователяНастройки пользователя т.е. хрень которая используется только клиентом, а из базы целиком читается и целиком пишется можно хранить в к.л. контейнере типа ХМL (или в простейшем старом добром виде значений через запятую) отдавая однако себе отчет что обработка сервером типа заменить у всех клиентов настройку А на настройку Б у которых настойка В воон в том списке будет не эффективно.

astonДело даже не в дороговизне решения EAV. Если бабок много и это можно решить.Тут не в бабках дело. Хайнлайн как то сказал что бесплатных ланчей не бывает и за гибкость придется платить либо сложностью либо производительностью либо тем и другим.
...
Рейтинг: 0 / 0
Прошу немного критики по структуре БД
    #36318447
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Сказал как отрезал

Дружище, п%^&болов здесь и без Вас хватает. По существу есть что сказать?
...
Рейтинг: 0 / 0
Прошу немного критики по структуре БД
    #36318471
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_20040621По существу есть что сказать?Я намекал, что начав рубить правду-матку сплеча, не стоило растекаться мыслями по метамодели, целевая аудитория могла и словов таких не знать, и курсивом предложил сформулировать твою мысль по-проще. Насколько удачно получилось судить не мне.
...
Рейтинг: 0 / 0
Прошу немного критики по структуре БД
    #36318479
SokolNik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SERG1257,

мысль была абсолютно четкой, уж больше бы я на его месте к этой теме просто не возвращался
любые дальнейшие комментраии излишни
...
Рейтинг: 0 / 0
Прошу немного критики по структуре БД
    #36318496
Тифа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хм а чем описанное не подходит под метамодель общей системы? есть описание всех объектов, всех атрибутов, всех связей, записано не в блокноте, а с использованием этой же самой модели. Т.е. знаю не только я как и где что лежит, а знает база.

ну ладно вроде согласились, что есть, как вы говорите, мусор, которому не нужно целостности и согласованности, причем мне кажется что его гораздо больше чем вы пишете, и 20 атрибутов куда более мифичнее)

по поводу не нормализованых полей, мое мнение что так делать нельзя, плохо парсится, плохо изменяется (как сама структура так и наполнение), да и зачем когда можно написать все в таблицу откуда и парсить не надо и проблем с изменением нет
...
Рейтинг: 0 / 0
Прошу немного критики по структуре БД
    #36318654
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> чем описанное не подходит под метамодель общей системы?

Ничем. Это не метамодель.
...
Рейтинг: 0 / 0
Прошу немного критики по структуре БД
    #36320834
Тифа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_20040621> чем описанное не подходит под метамодель общей системы?

Ничем. Это не метамодель.

видимо не так термин понимаю, можно ссылочку какую-нить где почитать можно? если не сложно
...
Рейтинг: 0 / 0
Прошу немного критики по структуре БД
    #36321142
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> ссылочку какую-нить

В свое время я начинал со спецификации MetaObject Facility (omg.org/mof/). Дело было давно, возможно, появились материалы на русском языке. Не то, чтобы спецификацию нужно воспринимать как руководство к действию, но после нее появляются правильные вопросы, ответы на которые искать уже просто.
...
Рейтинг: 0 / 0
Прошу немного критики по структуре БД
    #36321526
nosov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GOOGLE --> METAMODEL
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Прошу немного критики по структуре БД
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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