powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Не совсем реалиционная система... как организовать?
19 сообщений из 19, страница 1 из 1
Не совсем реалиционная система... как организовать?
    #34291321
sycore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хочется организовать структуру данных с нефиксированым набором атрибутов.
Есть какой-то объект в таблице, хотелось бы с ним связать любое количество параметров(атрибутов) и чтобы значения данного атрибута были типизированы - т.е. сохранялись возможности для поиска, вывода в отсортированом виде и т.д. Своего рода 3D-модель (обьект-атрибут-значение атрибута)

Проще говоря я хочу иметь возможность модифицировать не только значения отдельных полей, но и добавлять/удалять поля - это должна быть штатная операция. Этого можно сделать к примеру если использовать ALTER TABLE ... ADD/DELETE COLUMN ... Но это не совсем удачное решение.

Есть ли для этого какие-то готовые решения?
...
Рейтинг: 0 / 0
Не совсем реалиционная система... как организовать?
    #34291354
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sycoreХочется организовать структуру данных с нефиксированым набором атрибутов.
Есть какой-то объект в таблице, хотелось бы с ним связать любое количество параметров(атрибутов) и чтобы значения данного атрибута были типизированы - т.е. сохранялись возможности для поиска, вывода в отсортированом виде и т.д. Своего рода 3D-модель (обьект-атрибут-значение атрибута)

Проще говоря я хочу иметь возможность модифицировать не только значения отдельных полей, но и добавлять/удалять поля - это должна быть штатная операция. Этого можно сделать к примеру если использовать ALTER TABLE ... ADD/DELETE COLUMN ... Но это не совсем удачное решение.

Есть ли для этого какие-то готовые решения?

Ну и храните в "Своего рода 3D-модель (обьект-атрибут-значение атрибута)" виде. Выбрать можно всегда, а после уж сортируйте как хотите.
...
Рейтинг: 0 / 0
Не совсем реалиционная система... как организовать?
    #34291356
Фотография Rin@t
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot sycore]Хочется организовать структуру данных с нефиксированым набором атрибутов.
Есть какой-то объект в таблице, хотелось бы с ним связать любое количество параметров(атрибутов) и чтобы значения данного атрибута были типизированы - т.е. сохранялись возможности для поиска, вывода в отсортированом виде и т.д. Своего рода 3D-модель (обьект-атрибут-значение атрибута)[quot]
Для таких задач подходят СУБД Pick, UniVerse, JBase. В них каждая запись состоит из атрибутов. Атрибут в свою очередь может содержать значение, значение - подзначение.
...
Рейтинг: 0 / 0
Не совсем реалиционная система... как организовать?
    #34291361
Осака Вестингауз
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или совсем развернуть вдоль (дополнительная таблица Values (id, TableID, RecordID, FieldName, FieldValue)), или наделать в основной таблице кучу полей Int1, Int2, String1, String2 (смысл им придавать у каждой записи свой, хранить соответствие в каком-нибудь справочнике). В 1м варианте - медленно и запросы сложные, во 2м - путаница какое поле что означает.
...
Рейтинг: 0 / 0
Не совсем реалиционная система... как организовать?
    #34291381
sycore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Ну и храните в "Своего рода 3D-модель (обьект-атрибут-значение атрибута)" виде. Выбрать можно всегда, а после уж сортируйте как хотите.

неее, своими силами сортировку проводить не хочется совсем....
будет 100000 значений - все придётся выбирать чтобы вывести с 25 по 50


> Для таких задач подходят СУБД Pick, UniVerse, JBase.
Честно говоря я не сомневаюсь, что решений масса есть, но всё-таки хочется ориентироваться на обычные реляционные БД. Как-то же это должно решаться.

> или совсем развернуть вдоль (дополнительная таблица Values (id, TableID, RecordID, FieldName, FieldValue)),
Вот это уже ближе.Я вот собственно к такой схеме и склоняюсь.

Только скорее так:
Records (Id, AttributeSetId)
AttributeSets (Id)
Fields (Id, AttrubuteSetId, FieldName, FieldType (int)) -- Таблица атрибутов
ValueType1 (FieldId, RecordId, FieldValue(int)) -- Таблица целочисленых значений
ValueType2 (FieldId, RecordId, FieldValue(text)) -- Таблица тестовых значений
....
И так для всех типов, будет немного.
В данном случае каждая запись в Record имеет набор атрибутов - это одно измерение.
Чтобы выцепить список - мы сперва выбираем список атрибутов.
Дальше мы выцепляем по этому набору ОДНИМ запросом с использованием OUTER JOIN прям табичку, в которой будут все значения всех атрибутов и тут же можно осуществлять сортировку, фильтрацию. Проверено - работает.
На мой взгляд если число атрибутов относительно невелико (ну до 10 например) - так жить можно.

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


> или наделать в основной таблице кучу полей Int1, Int2, String1, String2 (смысл им придавать у каждой записи свой, хранить соответствие в каком-нибудь справочнике).
Ну тоже вариант, только куча всё равно получится ограниченой.
Возможно комбинирование вариантов 1 и 2 - те наделать в Records 3-4 поля каждого типа (ну или в соответствии с частотой использования) и использовать "статические" и "динамические" поля совместно. Причём статические также включать в описание. Тогда динамические поля будут использованы нечасто, в результате производительность не будет страдать сильно...
...
Рейтинг: 0 / 0
Не совсем реалиционная система... как организовать?
    #34291573
Cool!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
? DECISION CUBE от Borland (Delphi 7 в других аналогов не знаю)
Но замудрили вы конкретно :) может как то можно обойтись без этого (через ООП например)
...
Рейтинг: 0 / 0
Не совсем реалиционная система... как организовать?
    #34291615
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sycore
На мой взгляд если число атрибутов относительно невелико (ну до 10 например) - так жить можно.


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

Вывод - такую структуру можно использовать, если эти атрибуты заполняются в малом (не более 5, по моим оценкам) проценте случаев. В противном же случае надо для каждого атрибута добавлять колонки в таблицы. Не обязательно все их пихать в одну таблицу - можно сделать несколько таблиц, объединив атрибуты в логически связанные группы.
...
Рейтинг: 0 / 0
Не совсем реалиционная система... как организовать?
    #34291650
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поиск рулит .
...
Рейтинг: 0 / 0
Не совсем реалиционная система... как организовать?
    #34291730
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sycore> Для таких задач подходят СУБД Pick, UniVerse, JBase.
Честно говоря я не сомневаюсь, что решений масса есть, но всё-таки хочется ориентироваться на обычные реляционные БД. Как-то же это должно решаться.

мягко говоря - странный подход. Или используйте СУБД, которые предназначены для хранения подобных структур или меняйте структуру, т.е. сделайте "обычные реляционные данные".
...
Рейтинг: 0 / 0
Не совсем реалиционная система... как организовать?
    #34292045
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafm sycore> Для таких задач подходят СУБД Pick, UniVerse, JBase.
Честно говоря я не сомневаюсь, что решений масса есть, но всё-таки хочется ориентироваться на обычные реляционные БД. Как-то же это должно решаться.

мягко говоря - странный подход. Или используйте СУБД, которые предназначены для хранения подобных структур или меняйте структуру, т.е. сделайте "обычные реляционные данные".

Валерий, а где можно динамически менят количество свойств объекта?
...
Рейтинг: 0 / 0
Не совсем реалиционная система... как организовать?
    #34292053
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сахават Юсифов iscrafm sycore> Для таких задач подходят СУБД Pick, UniVerse, JBase.
Честно говоря я не сомневаюсь, что решений масса есть, но всё-таки хочется ориентироваться на обычные реляционные БД. Как-то же это должно решаться.

мягко говоря - странный подход. Или используйте СУБД, которые предназначены для хранения подобных структур или меняйте структуру, т.е. сделайте "обычные реляционные данные".

Валерий, а где можно динамически менят количество свойств объекта?
Пользователем.
...
Рейтинг: 0 / 0
Не совсем реалиционная система... как организовать?
    #34292099
1. таблица Объектов (ИД)
2. таблица Атрибутов (ИД,Наименование)
3. таблица ЗначенийАтрибутов (ИД,СсылкаНаОбъект,СсылкаНаАтрибут,Значение)
...
Рейтинг: 0 / 0
Не совсем реалиционная система... как организовать?
    #34292272
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сахават Юсифов
Валерий, а где можно динамически менят количество свойств объекта?
Приветствую Сахават,
допустим в объектных или XML-ориентированных базах...
...
Рейтинг: 0 / 0
Не совсем реалиционная система... как организовать?
    #34292285
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafm Сахават Юсифов
Валерий, а где можно динамически менят количество свойств объекта?
Приветствую Сахават,
допустим в объектных или XML-ориентированных базах...

Ну, это не продашь. :)
Легче самому на РМД.
...
Рейтинг: 0 / 0
Не совсем реалиционная система... как организовать?
    #34292663
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sycoreЭтого можно сделать к примеру если использовать ALTER TABLE ... ADD/DELETE COLUMN ... Но это не совсем удачное решение.

А что собственно не нравится? ИМХО, это лучшее по производительности и почти готовое решение.
...
Рейтинг: 0 / 0
Не совсем реалиционная система... как организовать?
    #34292758
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так например абс ibso устроена:таблицы делаются через их Навигатор и там же добавляются атрибуты.
...
Рейтинг: 0 / 0
Не совсем реалиционная система... как организовать?
    #34292770
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мой пост относится к mcureenab
...
Рейтинг: 0 / 0
Не совсем реалиционная система... как организовать?
    #34292987
sycore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>Если невелико, то действительно можно. Но я наблюдал систему построенную по такому принципу и поначалу там
> число таких атрибутов действительно было невелико, но относительная простота добавления нового атрибута
> сильно развращает программистов.
Естественно реь идёт о "поисковых" атрибутах. Но пока мне симпатизирует комбинированое решение - когда часть атрибутов фиксируются в самой таблице, только переназначается их смысл. Причём если кол-во динамических атрибутов вырастет - мы можем увеличить кол-во статических посредством ALTER TABLE (сделать это руками) и перенести часть динамических атрибутов в статические.

>поискрулит.
да, если знаешь ключевые слова. Так что за EAV спасибо, собственно что я и хотел.

> мягко говоря - странный подход. Или используйте СУБД, которые предназначены для хранения подобных структур или меняйте структуру, т.е. сделайте "обычные реляционные данные".
Тут проблема вот в чём - таблица Records (условно) для которой необходимо найти решение по добавлению атрибутов - малая часть НОРМАЛЬНОЙ РЕЛЯЦИОННОЙ БД, в которой таких проблем нет и всё прекрасно укладывается в списочно-ссылочный формат. Стоит ли ради того чтобы красиво решить эту проблему привлекать специальные средства?
Ещё момент - в этом случае БД требуется под ОС Linux и желатеьно свободная.
...
Рейтинг: 0 / 0
Не совсем реалиционная система... как организовать?
    #34294636
D_000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообще-то, проблема хрестоматийная.

Уж сколько копий было сломано на этих "динамических" атрибутах... А сколько компьютеров вынуждали тормозить неграмотной архитектурой...

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

Ещё один вариант "кривого" выхода - создавать под каждый атрибут свою таблицу. Но тогда вы должны иметь в виду, что общий размер базы будет равен примерно (n атрибутов * m записей), т.е. гигантским. И работать с JOINT-ами. С точки зрения производительности, это всё равно будет выгоднее чем создавать одну мегатаблицу с офигенным количеством "резервных" полей.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Не совсем реалиционная система... как организовать?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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