powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Хранение сложных объектов в базе данных
36 сообщений из 36, показаны все 2 страниц
Хранение сложных объектов в базе данных
    #33936238
as111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хранение сложных объектов в базе данных.

Есть некие объекты (не важно какие) которые обладают различными характеристиками. Для примера будем рассматривать чисто гипотетические примеры.
Например, утюги они обладают характеристиками:
Вес
Цена
Производитель
Проводной/Беспроводной


Телевизоры
Вес
Размер диагонали
ЖК/Трубка
Цвет

Клавиатуры
Сколько кнопок
Проводная/Радио
Цвет
Дизайн

Т.е. объекты могут быть какими угодно и у них могут быть различные свойства. Заранее я не могу сказать, т.к. в любой момент времени может появиться новый объект или новое свойство. Свойство может быть числовым, произвольной строкой или строкой из списка.
Т.е. вся структура должна быть гибкой…

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


Есть у кого идеи как все это запроектировать? Может есть ссылки…
...
Рейтинг: 0 / 0
Хранение сложных объектов в базе данных
    #33936272
ziro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ссылка есть - 1С (серьезно)

Задача классическая, есть куча хорошо опробированных методик.
Ну а если в кратце - то так:
из всей совокупности возможных атрибутов сущностей, которые необходимо
хранить, надо выделить те, которые имеются у всех, например
Название, Цена, Производитель (таблица раз). Ну может быть и еще
некоторые. Далее надо разбить сущности по группам с одинаковыми атрибутами,
например Утюх, Телек, Клава (таблица два). И вдобавок делаем таблицу
свойств такого типа Ид группы, Заголовок, Тип, Длина, Не NULL и
еще чего нужно (таблица 3). Ну а далее - на Ваше усмотрение можно
а) на лету создавать дополнительные таблицы на основе таблиц свойств;
б) к каждой сущности прифигачить штук десять полей типа varchar с
максимально допустимой длиной, в которых будут храниться значения
свойств, а что за свойства - см. таблицу 3 по номеру свойства;
в) нормализованный вариант б) - создаем таблицу Ид в таблице раз,
Ид в таблице 3, поле типа varchar с максимально допустимой длиной,
в которых будут храниться значения свойства
;
...
Рейтинг: 0 / 0
Хранение сложных объектов в базе данных
    #33936369
Фотография Big17
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще есть вариант со следующими таблицами:
1. Справочник объектов (утюг, холодильник и т.д.)
2. Справочник свойств объектов (Просто наименования)
3. Таблица значений
...
Рейтинг: 0 / 0
Хранение сложных объектов в базе данных
    #33936374
Фотография Big17
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл:
В нижнюю таблицу нужно добавить еще один внешний ключ - который будет ссылаться уже на объекты.
...
Рейтинг: 0 / 0
Хранение сложных объектов в базе данных
    #33936377
Фотография Big17
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Хранение сложных объектов в базе данных
    #33936481
bas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще в "Объекты" желательно добавить ссылку на "Справочник объектов"
...
Рейтинг: 0 / 0
Хранение сложных объектов в базе данных
    #33936500
bas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На самом деле много, что можно еще добавить туда ...
Так что поиск рулит, ключь - EAV.
...
Рейтинг: 0 / 0
Хранение сложных объектов в базе данных
    #33936806
as111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо.

Но думал, может есть более краивый вариант.
Задача еще усложняется тем, что этих объектов много и св-в их тоже много. Что-то порядка 50 св-в и 100.000 объектов.
Если делать в длину ID объекта, ID свойства, значение, то строк автоматом становится 5млн. - это наверно плохо.
Делать таблицу с 50 столбцами? Ну тоже вариант.
...
Рейтинг: 0 / 0
Хранение сложных объектов в базе данных
    #33937030
121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
121
Гость
был здесь топик про систему параметрического поиска. Имхо, ваш случай.
...
Рейтинг: 0 / 0
Хранение сложных объектов в базе данных
    #33938871
Даже 50 000 "свойств" в "таблице объектов" не приведет ни к каким проблемам. А у Вас всего 50 "свойств".
...
Рейтинг: 0 / 0
Хранение сложных объектов в базе данных
    #33938875
....Понеслась?
...
Рейтинг: 0 / 0
Хранение сложных объектов в базе данных
    #33938876
Вас понял. Хотите поболтать в узком кругу "специалистов". Что же, не буду мешать.
...
Рейтинг: 0 / 0
Хранение сложных объектов в базе данных
    #33939956
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
as111Всем спасибо.

Но думал, может есть более краивый вариант.
Задача еще усложняется тем, что этих объектов много и св-в их тоже много. Что-то порядка 50 св-в и 100.000 объектов.
Если делать в длину ID объекта, ID свойства, значение, то строк автоматом становится 5млн. - это наверно плохо.
Делать таблицу с 50 столбцами? Ну тоже вариант.
Есть еще третий вариант - таблица с 10 ( для примера) столбцами свойств и 10 строками на объект.
Значение выбирается по коду объекта, типу строки и колонке.
Словарь определяет колонку и тип строки для заданного свойства.
...
Рейтинг: 0 / 0
Хранение сложных объектов в базе данных
    #33939964
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Количество строк конечно ни чем не ограничивается, количество столбцов - возможностями СУБД.
...
Рейтинг: 0 / 0
Хранение сложных объектов в базе данных
    #33940688
as111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, если смочь заранее выявить все возможные св-ва и поместить их в таблице объектов, то конечно это ни как и ни на что не повлияет. А если этих св-в не понятно сколько, то их придется помещать в таблицу св-в, а здесь уж их количество очень даже может повлиять...
Почитал про возможные схемы - суть понятна, надо чем-то жертвовать.

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

Таблица типов: название типа, длина и т.п., таблица хранения
Таблица объектов: название, ид
Таблица свойств : название, ид, тип
Таблица назначения свойств: объект, свойство

значения свойств в таблицах харанения, соответственно. Таблица хранения создается в момент заведения нового типа. Естественно голым sql тут уже не обойдешься, нужна хоть какая-то БЛ.
...
Рейтинг: 0 / 0
Хранение сложных объектов в базе данных
    #33944820
Кифирчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не пойму, Big17 предложил ИМХО самое красивое решение
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
перечень утюгов, телевизоров... (objects)
obj_id     name        
---------------
 1            Утюг № 1 
 2            Утюг № 2 
 3            Телевизор  1 
 4            Телевизор  2 

таблица свойств (types)
type_id       type_name
------------------------
 1                 мощность
 2                 цена
 3                 масса
 4                 диагональ

связь свойств и с приборами (type_obj)
obj_id         type_id        type_value
-----------------------------------
 1                  1                  300ВТ
 1                  2                  1500руб
 3                  2                  17000руб
 3                  4                   21 '
и примерно так получить список со свойствами
Код: plaintext
1.
2.
3.
4.
5.
SELECT O.name, T.type_name, TO.type_value
FROM objects AS O, types AS T, type_obj AS TO
WHERE
    O.obj_id = TO.obj_id
    T.type_id = TO.type_id
сколько угодно свойств, сколько угодно утюгов и полей в таблицах не много
...
Рейтинг: 0 / 0
Хранение сложных объектов в базе данных
    #33945822
gybson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
угу, и хранить все в строках? и кругом потом конверты :)
...
Рейтинг: 0 / 0
Хранение сложных объектов в базе данных
    #33946113
AlexTheRaven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
as111Всем спасибо.

Но думал, может есть более краивый вариант.
Задача еще усложняется тем, что этих объектов много и св-в их тоже много. Что-то порядка 50 св-в и 100.000 объектов.
Если делать в длину ID объекта, ID свойства, значение, то строк автоматом становится 5млн. - это наверно плохо.
Делать таблицу с 50 столбцами? Ну тоже вариант.

Наверное, "красивее" использовать ООСУБД. Хотя лично я против таких "изяществ": по мне лучше EAV и проверенная десятилетиями РСУБД промышленного уровня, к которой уже давно прикрутили всё мыслимое и немыслимое, чем ООСУБД, которой в некоторый плохо предсказуемый момент может не хватить. Это моё личное мнение, и не повод для раздувания флейма - для этого есть форум "Сравнение СУБД".
...
Рейтинг: 0 / 0
Хранение сложных объектов в базе данных
    #33946124
sqllex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем конверты везде ? Вы собираетесь суммировать мощности, размеры диагоналей ... или все же только стоимость? :)
...
Рейтинг: 0 / 0
Хранение сложных объектов в базе данных
    #33946306
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gybsonугу, и хранить все в строках? и кругом потом конверты :)Ну почему же, просто приведен упрощенный пример. Кто мешает реализовать несколько типов данных - строка, число, дата/время. Добавьте сюда блоб и будет Вам счастье :-))
...
Рейтинг: 0 / 0
Хранение сложных объектов в базе данных
    #33948404
gybson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем конверты везде? Вы собираетесь суммировать мощности, размеры диагоналей ... или все же только стоимость? :)

Рад, что Вы пользуетесь только агрегатными функциями.

1. Конверт при записи.
2. Конверт при сравнении.
3. Конверт при обработке

Вариант с заданными таблицами свойств "строка", "число", "дата", "ссылка" тоже использовал, тоже неплохо получается, но не идеально :)
...
Рейтинг: 0 / 0
Хранение сложных объектов в базе данных
    #33948605
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gybson
Вариант с заданными таблицами свойств "строка", "число", "дата", "ссылка" тоже использовал, тоже неплохо получается, но не идеально :)
идеальных решений нет
http://www.sql.ru/forum/actualthread.aspx?tid=294156&pg=-1&hl=%e3%ee%f0%e8%e7%ee%ed%f2%e0%eb%e8#2673329
...
Рейтинг: 0 / 0
Хранение сложных объектов в базе данных
    #33954552
gybson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
идеальных решений нет


зато есть негодные
...
Рейтинг: 0 / 0
Хранение сложных объектов в базе данных
    #33954735
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gybson
идеальных решений нет


зато есть негодные
:))
нет - есть оптимальные и есть рациональные.

Оптимально было бы полететь на самолёте, но рационально на поезде )))
...
Рейтинг: 0 / 0
Хранение сложных объектов в базе данных
    #33955216
gybson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да нет, тут как с женщинами, бывают красивые, бывают умные, а бывают тупые уродины.
...
Рейтинг: 0 / 0
Хранение сложных объектов в базе данных
    #33955255
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gybsonДа нет, тут как с женщинами, бывают красивые, бывают умные, а бывают тупые уродины.
невольно потянулась рука к визитке твоей и фото )
Шучу :)
Удачи!
...
Рейтинг: 0 / 0
Хранение сложных объектов в базе данных
    #33955898
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123
Оптимально было бы полететь на самолёте, но рационально на поезде )))

Поезда не крокодилы, они не летают.
...
Рейтинг: 0 / 0
Хранение сложных объектов в базе данных
    #33956006
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
as111Есть у кого идеи как все это запроектировать? Может есть ссылки…

Описание любого объекта можно хранить в одной строке, например в XML формате. По мере надобности пользователь может расширять XML схему, добавляя новые типы объектов и атрибуты существующих объектов.

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

Для атрибутов, которые используются чаще всего можно завести отдельные индексированные колонки таблицы объектов. И т.д. Т.е. оптимальное решение конкретной задачи может быть комбинацией разных подходов.
...
Рейтинг: 0 / 0
Хранение сложных объектов в базе данных
    #33956043
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenabДля поиска в такой структуре можно использовать полный просмотр таблицы с отбором объектов в описании которых встречаются искомые фразы.
жалко что искать в XML (xPath) пока тока Oracl IMHO умеет
...
Рейтинг: 0 / 0
Хранение сложных объектов в базе данных
    #33956095
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123 mcureenabДля поиска в такой структуре можно использовать полный просмотр таблицы с отбором объектов в описании которых встречаются искомые фразы.
жалко что искать в XML (xPath) пока тока Oracl IMHO умеет

XML это текст. Для поиска в XML можно использовать обычные строковые функции. Если нет желания делать свой поисковик, можно выбрать СУБД, в которой нужные функции уже реализованы, благо, эта отрасль не стоит на месте.
...
Рейтинг: 0 / 0
Хранение сложных объектов в базе данных
    #33956228
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenab Petro123 mcureenabДля поиска в такой структуре можно использовать полный просмотр таблицы с отбором объектов в описании которых встречаются искомые фразы.
жалко что искать в XML (xPath) пока тока Oracl IMHO умеет

XML это текст. Для поиска в XML можно использовать обычные строковые функции. Если нет желания делать свой поисковик, можно выбрать СУБД, в которой нужные функции уже реализованы, благо, эта отрасль не стоит на месте.
да, но пока не появится поддержка языка запросов к XML в РСУБД, буду по старинке - объект-класс в BLOB и поля класса по которым возможен поиск - дублированно в в поля таблицы БД.
...
Рейтинг: 0 / 0
Хранение сложных объектов в базе данных
    #33957282
gybson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вариант с самописным linked server не рассматриваем? Есть куча идей :D :D :D :D :D
...
Рейтинг: 0 / 0
Хранение сложных объектов в базе данных
    #33957721
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123да, но пока не появится поддержка языка запросов к XML в РСУБД, буду по старинке - объект-класс в BLOB и поля класса по которым возможен поиск - дублированно в в поля таблицы БД.

BLOB это сурово. Всё же возможность работать с объектом в SQL как правило не маловажная, а с двоичными данными на таких языках как SQL и PL/SQL работать сложно. С другой стороны разработчики СУБД вняли требованиям клиентов. Оракл, например, кроме XML реализовал ещё и тип AnyData. Объект хранится в нормальной форме (то, что структура объекта не фиксиованная на суть не влияет, просто описание структуры вынесено из словаря БД в код приложения), а остальные полезности в дополнительных структурах.
...
Рейтинг: 0 / 0
Хранение сложных объектов в базе данных
    #33961473
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123 mcureenabДля поиска в такой структуре можно использовать полный просмотр таблицы с отбором объектов в описании которых встречаются искомые фразы.
жалко что искать в XML (xPath) пока тока Oracl IMHO умеет

А разве такую фишку в SQL2005 не реализовали?
там и индексы по XML-полям :)
...
Рейтинг: 0 / 0
Хранение сложных объектов в базе данных
    #33961525
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sp Petro123 mcureenabДля поиска в такой структуре можно использовать полный просмотр таблицы с отбором объектов в описании которых встречаются искомые фразы.
жалко что искать в XML (xPath) пока тока Oracl IMHO умеет

А разве такую фишку в SQL2005 не реализовали?
там и индексы по XML-полям :)
может быть, не проверял :).
Когда делал проект, не было ещё 2005 :)

/topic/103823

PS. Может и поддержка SQL3 там есть?
...
Рейтинг: 0 / 0
36 сообщений из 36, показаны все 2 страниц
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Хранение сложных объектов в базе данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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