|
|
|
Хранение сложных объектов в базе данных
|
|||
|---|---|---|---|
|
#18+
Хранение сложных объектов в базе данных. Есть некие объекты (не важно какие) которые обладают различными характеристиками. Для примера будем рассматривать чисто гипотетические примеры. Например, утюги они обладают характеристиками: Вес Цена Производитель Проводной/Беспроводной Телевизоры Вес Размер диагонали ЖК/Трубка Цвет Клавиатуры Сколько кнопок Проводная/Радио Цвет Дизайн Т.е. объекты могут быть какими угодно и у них могут быть различные свойства. Заранее я не могу сказать, т.к. в любой момент времени может появиться новый объект или новое свойство. Свойство может быть числовым, произвольной строкой или строкой из списка. Т.е. вся структура должна быть гибкой… Но и это не самое страшное. Надо еще чтобы запросом можно было извлекать список утюгов со всеми атрибутами (например, для сравнения) Есть у кого идеи как все это запроектировать? Может есть ссылки… ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2006, 06:44 |
|
||
|
Хранение сложных объектов в базе данных
|
|||
|---|---|---|---|
|
#18+
Ссылка есть - 1С (серьезно) Задача классическая, есть куча хорошо опробированных методик. Ну а если в кратце - то так: из всей совокупности возможных атрибутов сущностей, которые необходимо хранить, надо выделить те, которые имеются у всех, например Название, Цена, Производитель (таблица раз). Ну может быть и еще некоторые. Далее надо разбить сущности по группам с одинаковыми атрибутами, например Утюх, Телек, Клава (таблица два). И вдобавок делаем таблицу свойств такого типа Ид группы, Заголовок, Тип, Длина, Не NULL и еще чего нужно (таблица 3). Ну а далее - на Ваше усмотрение можно а) на лету создавать дополнительные таблицы на основе таблиц свойств; б) к каждой сущности прифигачить штук десять полей типа varchar с максимально допустимой длиной, в которых будут храниться значения свойств, а что за свойства - см. таблицу 3 по номеру свойства; в) нормализованный вариант б) - создаем таблицу Ид в таблице раз, Ид в таблице 3, поле типа varchar с максимально допустимой длиной, в которых будут храниться значения свойства ; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2006, 07:48 |
|
||
|
Хранение сложных объектов в базе данных
|
|||
|---|---|---|---|
|
#18+
Еще есть вариант со следующими таблицами: 1. Справочник объектов (утюг, холодильник и т.д.) 2. Справочник свойств объектов (Просто наименования) 3. Таблица значений ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2006, 09:15 |
|
||
|
Хранение сложных объектов в базе данных
|
|||
|---|---|---|---|
|
#18+
Забыл: В нижнюю таблицу нужно добавить еще один внешний ключ - который будет ссылаться уже на объекты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2006, 09:17 |
|
||
|
Хранение сложных объектов в базе данных
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2006, 09:18 |
|
||
|
Хранение сложных объектов в базе данных
|
|||
|---|---|---|---|
|
#18+
И еще в "Объекты" желательно добавить ссылку на "Справочник объектов" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2006, 10:00 |
|
||
|
Хранение сложных объектов в базе данных
|
|||
|---|---|---|---|
|
#18+
На самом деле много, что можно еще добавить туда ... Так что поиск рулит, ключь - EAV. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2006, 10:06 |
|
||
|
Хранение сложных объектов в базе данных
|
|||
|---|---|---|---|
|
#18+
Всем спасибо. Но думал, может есть более краивый вариант. Задача еще усложняется тем, что этих объектов много и св-в их тоже много. Что-то порядка 50 св-в и 100.000 объектов. Если делать в длину ID объекта, ID свойства, значение, то строк автоматом становится 5млн. - это наверно плохо. Делать таблицу с 50 столбцами? Ну тоже вариант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2006, 11:14 |
|
||
|
Хранение сложных объектов в базе данных
|
|||
|---|---|---|---|
|
#18+
был здесь топик про систему параметрического поиска. Имхо, ваш случай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2006, 12:04 |
|
||
|
Хранение сложных объектов в базе данных
|
|||
|---|---|---|---|
|
#18+
Даже 50 000 "свойств" в "таблице объектов" не приведет ни к каким проблемам. А у Вас всего 50 "свойств". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2006, 21:18 |
|
||
|
Хранение сложных объектов в базе данных
|
|||
|---|---|---|---|
|
#18+
....Понеслась? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2006, 21:21 |
|
||
|
Хранение сложных объектов в базе данных
|
|||
|---|---|---|---|
|
#18+
Вас понял. Хотите поболтать в узком кругу "специалистов". Что же, не буду мешать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2006, 21:24 |
|
||
|
Хранение сложных объектов в базе данных
|
|||
|---|---|---|---|
|
#18+
as111Всем спасибо. Но думал, может есть более краивый вариант. Задача еще усложняется тем, что этих объектов много и св-в их тоже много. Что-то порядка 50 св-в и 100.000 объектов. Если делать в длину ID объекта, ID свойства, значение, то строк автоматом становится 5млн. - это наверно плохо. Делать таблицу с 50 столбцами? Ну тоже вариант. Есть еще третий вариант - таблица с 10 ( для примера) столбцами свойств и 10 строками на объект. Значение выбирается по коду объекта, типу строки и колонке. Словарь определяет колонку и тип строки для заданного свойства. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2006, 13:02 |
|
||
|
Хранение сложных объектов в базе данных
|
|||
|---|---|---|---|
|
#18+
Количество строк конечно ни чем не ограничивается, количество столбцов - возможностями СУБД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2006, 13:04 |
|
||
|
Хранение сложных объектов в базе данных
|
|||
|---|---|---|---|
|
#18+
Да, если смочь заранее выявить все возможные св-ва и поместить их в таблице объектов, то конечно это ни как и ни на что не повлияет. А если этих св-в не понятно сколько, то их придется помещать в таблицу св-в, а здесь уж их количество очень даже может повлиять... Почитал про возможные схемы - суть понятна, надо чем-то жертвовать. Хотя может еще какие идеи есть? Нужно что-то типа типа хранилища для инвентаризации: понятно, что св-в там определенное количество, но хочется описывать уникальные характеристики. Например у принтера можно написать модель, производитель, а хочется еще что он лазерный, цветной, сетевой и плохо печатает :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2006, 15:50 |
|
||
|
Хранение сложных объектов в базе данных
|
|||
|---|---|---|---|
|
#18+
я делал примерно такую базу Таблица типов: название типа, длина и т.п., таблица хранения Таблица объектов: название, ид Таблица свойств : название, ид, тип Таблица назначения свойств: объект, свойство значения свойств в таблицах харанения, соответственно. Таблица хранения создается в момент заведения нового типа. Естественно голым sql тут уже не обойдешься, нужна хоть какая-то БЛ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2006, 08:19 |
|
||
|
Хранение сложных объектов в базе данных
|
|||
|---|---|---|---|
|
#18+
не пойму, 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. Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2006, 17:15 |
|
||
|
Хранение сложных объектов в базе данных
|
|||
|---|---|---|---|
|
#18+
угу, и хранить все в строках? и кругом потом конверты :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2006, 08:11 |
|
||
|
Хранение сложных объектов в базе данных
|
|||
|---|---|---|---|
|
#18+
as111Всем спасибо. Но думал, может есть более краивый вариант. Задача еще усложняется тем, что этих объектов много и св-в их тоже много. Что-то порядка 50 св-в и 100.000 объектов. Если делать в длину ID объекта, ID свойства, значение, то строк автоматом становится 5млн. - это наверно плохо. Делать таблицу с 50 столбцами? Ну тоже вариант. Наверное, "красивее" использовать ООСУБД. Хотя лично я против таких "изяществ": по мне лучше EAV и проверенная десятилетиями РСУБД промышленного уровня, к которой уже давно прикрутили всё мыслимое и немыслимое, чем ООСУБД, которой в некоторый плохо предсказуемый момент может не хватить. Это моё личное мнение, и не повод для раздувания флейма - для этого есть форум "Сравнение СУБД". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2006, 10:40 |
|
||
|
Хранение сложных объектов в базе данных
|
|||
|---|---|---|---|
|
#18+
А зачем конверты везде ? Вы собираетесь суммировать мощности, размеры диагоналей ... или все же только стоимость? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2006, 10:42 |
|
||
|
Хранение сложных объектов в базе данных
|
|||
|---|---|---|---|
|
#18+
gybsonугу, и хранить все в строках? и кругом потом конверты :)Ну почему же, просто приведен упрощенный пример. Кто мешает реализовать несколько типов данных - строка, число, дата/время. Добавьте сюда блоб и будет Вам счастье :-)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2006, 11:53 |
|
||
|
Хранение сложных объектов в базе данных
|
|||
|---|---|---|---|
|
#18+
А зачем конверты везде? Вы собираетесь суммировать мощности, размеры диагоналей ... или все же только стоимость? :) Рад, что Вы пользуетесь только агрегатными функциями. 1. Конверт при записи. 2. Конверт при сравнении. 3. Конверт при обработке Вариант с заданными таблицами свойств "строка", "число", "дата", "ссылка" тоже использовал, тоже неплохо получается, но не идеально :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2006, 08:15 |
|
||
|
Хранение сложных объектов в базе данных
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2006, 09:59 |
|
||
|
Хранение сложных объектов в базе данных
|
|||
|---|---|---|---|
|
#18+
идеальных решений нет зато есть негодные ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2006, 10:24 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=33938876&tid=1545065]: |
0ms |
get settings: |
11ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
192ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
79ms |
get tp. blocked users: |
1ms |
| others: | 246ms |
| total: | 570ms |

| 0 / 0 |
