|
|
|
Хранение многомерного куба (с динамическим количеством измерений) в базе
|
|||
|---|---|---|---|
|
#18+
Привет всем. Есть такая проблема. В базе есть некоторое количество словарей (например, месяцы, города, сотрудники и т.п.). Пользователь может выбрать произвольное количество словарей. Соответственно получаем многомерный куб, где каждая сторона куба - это множество значений одного из словарей. Выбрав любую ячейку куба, пользователь может вбить туда произвольное значение. Если бы количество измерений было фиксированным, то нет проблем. Создаем таблицу, в которой первичный ключ состоит стольких столбцов, сколько словарей используется. Но что делать, если количество и тип столбцов выбираются пользователем? Как такую структуру сохранить в базе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2007, 17:26 |
|
||
|
Хранение многомерного куба (с динамическим количеством измерений) в базе
|
|||
|---|---|---|---|
|
#18+
Приведу пример. Предположим, сотрудник выбрал три словаря: месяцы, города, типы расходов. Получаем трехмерный куб. По одной грани откладываем месяцы, по второй - города, по третьей - типы расходов. Пользователь заполняет те ячейки, которые ему необходимо. Например, ячейка (март, Москва, такси) - 1000 руб. Проблема в том, что размерность куба зависит от того, сколько словарей использует пользователь и может варьироваться от 1 до количества словарей в системе. Так же содержимое ячейки - любой тип, который пользователь выбирает при построении куба. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2007, 18:05 |
|
||
|
Хранение многомерного куба (с динамическим количеством измерений) в базе
|
|||
|---|---|---|---|
|
#18+
И в чем собственно проблема? Пользователь выбрал измерения? Описал атрибуты? Вот и создайте соответствующую таблицу для этого куба, включая ключ по измерениям. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2007, 18:21 |
|
||
|
Хранение многомерного куба (с динамическим количеством измерений) в базе
|
|||
|---|---|---|---|
|
#18+
Если проблема только в первичном ключе, а не лимите колонок в СУБД, то создаем таблицу, в которой первичный ключ - суррогат. При желании, если больше совсем никто не котролирует уникальность при загрузке, создаем уникальный индекс/констрейнт - состоит из стольких столбцов, сколько словарей в базе и успешно допускает NULL. Иначе придется объединять наборы словарей, например тип и назначение расходов - типоназначение расходов (снежинка). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2007, 18:41 |
|
||
|
Хранение многомерного куба (с динамическим количеством измерений) в базе
|
|||
|---|---|---|---|
|
#18+
ModelR... то создаем таблицу, в которой первичный ключ - суррогат. ... И огребем проблему со скоростью доступа к данным. По выделенной таблице тоже будет не все автоматом хорошо, но если складывать все в одну кучу - точно будет весело. ModelRИначе придется объединять наборы словарей, например тип и назначение расходов - типоназначение расходов (снежинка). Ээ... из-за чего "придется"? Ну а объединение словарей - не буду говорить, что это совсем всегда плохо, но к плюсам этого подхода у меня весьма скептическое отношение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2007, 19:02 |
|
||
|
Хранение многомерного куба (с динамическим количеством измерений) в базе
|
|||
|---|---|---|---|
|
#18+
softwarerИ в чем собственно проблема? Пользователь выбрал измерения? Описал атрибуты? Вот и создайте соответствующую таблицу для этого куба, включая ключ по измерениям. Т.е. предлагается динамически создавать новую таблицу? Т.е. для каждого типа куба будет своя? В принципе, я так и думал, но интересно было, есть ли какое-то иное решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2007, 01:14 |
|
||
|
Хранение многомерного куба (с динамическим количеством измерений) в базе
|
|||
|---|---|---|---|
|
#18+
друзья зовут меня Красавчег Сёка Ну, дрпустим, решение есть, и что с того? Автору решения на хлеб с маслом будет или как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2007, 01:22 |
|
||
|
Хранение многомерного куба (с динамическим количеством измерений) в базе
|
|||
|---|---|---|---|
|
#18+
Сиоко Асахара друзья зовут меня Красавчег Сёка Ну, дрпустим, решение есть, и что с того? Автору решения на хлеб с маслом будет или как? Автору будет большое человеческое спасибо. Если не устраивает, то уж не обессудьте. :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2007, 01:32 |
|
||
|
Хранение многомерного куба (с динамическим количеством измерений) в базе
|
|||
|---|---|---|---|
|
#18+
paxmeleon Сиоко Асахара друзья зовут меня Красавчег Сёка Ну, дрпустим, решение есть, и что с того? Автору решения на хлеб с маслом будет или как? Автору будет большое человеческое спасибо. Если не устраивает, то уж не обессудьте. :-) А ответом будет большое "пожалуйста"! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2007, 02:08 |
|
||
|
Хранение многомерного куба (с динамическим количеством измерений) в базе
|
|||
|---|---|---|---|
|
#18+
paxmeleonНо что делать, если количество и тип столбцов выбираются пользователем? Как такую структуру сохранить в базе? EAV ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2007, 09:35 |
|
||
|
Хранение многомерного куба (с динамическим количеством измерений) в базе
|
|||
|---|---|---|---|
|
#18+
мод paxmeleonНо что делать, если количество и тип столбцов выбираются пользователем? Как такую структуру сохранить в базе? EAV Что-то я слабо представляю, как в данном случае может помочь EAV. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2007, 10:37 |
|
||
|
Хранение многомерного куба (с динамическим количеством измерений) в базе
|
|||
|---|---|---|---|
|
#18+
softwarerесли складывать все в одну кучу - точно будет весело.Зависит от размеров кучи. softwarerЭэ... из-за чего "придется"? Дык не влезут скажем некие 1350 размерностей в 1000 колонок некой СУБД. Маловероятно, что у автора из реально столько, но кто знает... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2007, 10:54 |
|
||
|
Хранение многомерного куба (с динамическим количеством измерений) в базе
|
|||
|---|---|---|---|
|
#18+
paxmeleonЧто-то я слабо представляю, как в данном случае может помочь EAV. Многомерный куб - это показатель (или группа пок-ей) на пересечении n координат. Каждая координата - справочник. Если куб проектирует пользователь, то каждая размерность это одна запись в таблице БД фиксированной стр-ры + запись со значением показателя, т.е. EAV. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2007, 11:02 |
|
||
|
Хранение многомерного куба (с динамическим количеством измерений) в базе
|
|||
|---|---|---|---|
|
#18+
мод paxmeleonЧто-то я слабо представляю, как в данном случае может помочь EAV. Многомерный куб - это показатель (или группа пок-ей) на пересечении n координат. Каждая координата - справочник. Если куб проектирует пользователь, то каждая размерность это одна запись в таблице БД фиксированной стр-ры + запись со значением показателя, т.е. EAV. Что-то я не совсем понял. Не могли бы вы привести пример. Просто в EAV данные сохраняются в таблице со столбцами примерно такого типа : ( objectID, propertyID, value ). Здесь же проблема в том, что в данном случае propertyID - это координата в кубе. Т.е. n значений по n измерениям. Или я что-то не так понял? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2007, 15:13 |
|
||
|
Хранение многомерного куба (с динамическим количеством измерений) в базе
|
|||
|---|---|---|---|
|
#18+
paxmeleonЗдесь же проблема в том, что в данном случае propertyID - это координата в кубе. Т.е. n значений по n измерениям. Или я что-то не так понял? Да, все правильно (я у себя так и делаю) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2007, 15:50 |
|
||
|
Хранение многомерного куба (с динамическим количеством измерений) в базе
|
|||
|---|---|---|---|
|
#18+
paxmeleon мод paxmeleonЧто-то я слабо представляю, как в данном случае может помочь EAV. Многомерный куб - это показатель (или группа пок-ей) на пересечении n координат. Каждая координата - справочник. Если куб проектирует пользователь, то каждая размерность это одна запись в таблице БД фиксированной стр-ры + запись со значением показателя, т.е. EAV. Что-то я не совсем понял. Не могли бы вы привести пример. Просто в EAV данные сохраняются в таблице со столбцами примерно такого типа : ( objectID, propertyID, value ). Здесь же проблема в том, что в данном случае propertyID - это координата в кубе. Т.е. n значений по n измерениям. Или я что-то не так понял? Не получится.Там ничего не должно быть кроме ссылок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2007, 15:55 |
|
||
|
Хранение многомерного куба (с динамическим количеством измерений) в базе
|
|||
|---|---|---|---|
|
#18+
paxmeleon( objectID, propertyID, value ) objecttype - тип объекта классификации objectID - ИД объекта классификации propertyID - имя координаты (например - Поставщики) value - значение координаты (ИД Поставщика) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2007, 16:11 |
|
||
|
Хранение многомерного куба (с динамическим количеством измерений) в базе
|
|||
|---|---|---|---|
|
#18+
ModelRЗависит от размеров кучи. Скорее, "теоретически зависит". Практически - при весьма небольших и скоро достижимых размерах кучи зависимость превратится в однозначный результат. ModelRДык не влезут скажем некие 1350 размерностей Понял. Просто изначально не осознал, к чему относится "иначе" в Вашей фразе. Впрочем, вопрос опять же.. скорее теоретический. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2007, 16:30 |
|
||
|
Хранение многомерного куба (с динамическим количеством измерений) в базе
|
|||
|---|---|---|---|
|
#18+
мод paxmeleon( objectID, propertyID, value ) objecttype - тип объекта классификации objectID - ИД объекта классификации propertyID - имя координаты (например - Поставщики) value - значение координаты (ИД Поставщика) Наверное вы не поняли. в моем случае, например, если выбрано три словаря (месяцы, города, типы расходов), то тогда ячейка куба имеет кооринаты, например (март, Москва, такси), а значение - 1000 руб. Т.е. здесь propertyID - это кортеж из трех значений, а value - значение в ячейке куба. Т.е. propertyID описывает имя property, которое, в данном случае, есть адрес ячейки в кубе. Для 10 словарей координата ячейки описывается 10 значениями и т.п. Поэтому EAV тут не подходит. Или я опять что-то не понял? :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2007, 17:59 |
|
||
|
Хранение многомерного куба (с динамическим количеством измерений) в базе
|
|||
|---|---|---|---|
|
#18+
Опять же для примера. Для набора (месяцы, города, типы расходов) у нас записи будут такие: март, Москва, такси - 1000 апрель, Москва, гостиница - 5000 Для набора (месяцы, города, сотрудники, типы расходов) у нас будет так: март, Москва, Вася Пупкин, такси - 2000 апрель, Питер, Коля Петров, гостиница - 6000 и т.п. как это укладывается в схему (objectid, propertyid, value) как я понял здесь propertyid - это координата. или вы имели ввиду другое? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2007, 18:03 |
|
||
|
Хранение многомерного куба (с динамическим количеством измерений) в базе
|
|||
|---|---|---|---|
|
#18+
paxmeleonмарт, Москва, Вася Пупкин, такси - 2000 как это укладывается в схему (objectid, propertyid, value) Первая строка квоты - раскладывается в пять строк указанного формата с одинаковыми objectid и разными propertyid/value. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2007, 18:09 |
|
||
|
Хранение многомерного куба (с динамическим количеством измерений) в базе
|
|||
|---|---|---|---|
|
#18+
softwarer paxmeleonмарт, Москва, Вася Пупкин, такси - 2000 как это укладывается в схему (objectid, propertyid, value) Первая строка квоты - раскладывается в пять строк указанного формата с одинаковыми objectid и разными propertyid/value. Понятно. Что-то мне подсказывает, что лучше создавать отдельную таблицу под каждое требуемое множество справочников, где завести отдельный столбец для objectid, по одному столбцу под каждую координату, и отдельный столбец под значение. В общем, как вы и советовали в начале. Единственная проблема, что таких таблиц может получиться очень много, а так же использование динамического sql. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2007, 19:27 |
|
||
|
Хранение многомерного куба (с динамическим количеством измерений) в базе
|
|||
|---|---|---|---|
|
#18+
paxmeleon softwarer paxmeleonмарт, Москва, Вася Пупкин, такси - 2000 как это укладывается в схему (objectid, propertyid, value) Первая строка квоты - раскладывается в пять строк указанного формата с одинаковыми objectid и разными propertyid/value. Понятно. Что-то мне подсказывает, что лучше создавать отдельную таблицу под каждое требуемое множество справочников, где завести отдельный столбец для objectid, по одному столбцу под каждую координату, и отдельный столбец под значение. В общем, как вы и советовали в начале. Единственная проблема, что таких таблиц может получиться очень много, а так же использование динамического sql. А вы попробуйте на досуге пофантазировать. Представьте себе, что вы будете жить 150 лет, из которых как минимум 100 будете в творческом полёте. В каком направлении будут развиваться программы по управлению данными, которых много (и без разницы, как эти программы называются, СУБД или как по-другому, разве в этом суть?) Данные, которых много! Вот в этом суть и смысл. Научные методы и теория в их унификации в компьютерных системах устарели или по крайней мере недостаточны. Вы ведь не верите в то, что нынешнее состояние в данной области будет вечно оставаться неизменным? Вот и приступайте. И не флеймите более, отпускаю вам грехи ваши... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2007, 01:43 |
|
||
|
Хранение многомерного куба (с динамическим количеством измерений) в базе
|
|||
|---|---|---|---|
|
#18+
paxmeleonПривет всем. Есть такая проблема. В базе есть некоторое количество словарей (например, месяцы, города, сотрудники и т.п.). Пользователь может выбрать произвольное количество словарей. Соответственно получаем многомерный куб, где каждая сторона куба - это множество значений одного из словарей. Выбрав любую ячейку куба, пользователь может вбить туда произвольное значение. Если бы количество измерений было фиксированным, то нет проблем. Создаем таблицу, в которой первичный ключ состоит стольких столбцов, сколько словарей используется. Но что делать, если количество и тип столбцов выбираются пользователем? Как такую структуру сохранить в базе? 2 варианта: 1. динамически создавать таблицу под куб. 2. Согдать куб по всем измерениям, использовать только некоторые. -- Есть еще вариант, с которым я год работал, и который позволяет в точности то, что Вам надо, но, боюсь, это слишком тяжелое решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2007, 19:14 |
|
||
|
Хранение многомерного куба (с динамическим количеством измерений) в базе
|
|||
|---|---|---|---|
|
#18+
Сиоко Асахара А вы попробуйте на досуге пофантазировать. Представьте себе, что вы будете жить 150 лет, из которых как минимум 100 будете в творческом полёте. В каком направлении будут развиваться программы по управлению данными, которых много (и без разницы, как эти программы называются, СУБД или как по-другому, разве в этом суть?) Данные, которых много! Вот в этом суть и смысл. Научные методы и теория в их унификации в компьютерных системах устарели или по крайней мере недостаточны. Вы ведь не верите в то, что нынешнее состояние в данной области будет вечно оставаться неизменным? Вот и приступайте. И не флеймите более, отпускаю вам грехи ваши... Не знаю как на счет флейма, но с вашей стороны не было ни одного сообщения по теме в этой ветке. Так что ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2007, 09:32 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=34798803&tid=1544291]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
175ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
84ms |
get tp. blocked users: |
1ms |
| others: | 265ms |
| total: | 570ms |

| 0 / 0 |
