powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Хранение сложных объектов в базе данных
25 сообщений из 36, страница 1 из 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
25 сообщений из 36, страница 1 из 2
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Хранение сложных объектов в базе данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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