Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / как проектировать N-мерный массив / 7 сообщений из 7, страница 1 из 1
08.07.2008, 13:24
    #35417490
Albatross
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как проектировать N-мерный массив
Есть N измерений, Их число не фикированно - они могут добавляться и удаляться.
Хочется хранить массив Y(x1.....xN), где x1....xN - натуральные числа
Если количество измерений увеличивается до N+1, то первоначально
Y(x1.....xN+1) = Y(x1.....xN) при любом xN+1


Единственное, что я придумал - это хранить таблицу

f1......fN, value, где f1...fN - название ключевых полей, а value - значение. Но при добавлении измерения таблицу надо будет менять, что плохо
...
Рейтинг: 0 / 0
08.07.2008, 14:27
    #35417696
как проектировать N-мерный массив
М.б., так? Операции удаления/добавления измерения на триггерах, например.
...
Рейтинг: 0 / 0
08.07.2008, 14:30
    #35417710
как проектировать N-мерный массив
Не ясно, как понимать вот эту строчку Y(x1.....xN+1) = Y(x1.....xN)???
...
Рейтинг: 0 / 0
14.07.2008, 11:52
    #35428170
Йуный джавистЪ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как проектировать N-мерный массив
Надо сделать таблицу с 2 полями:
1)index - bigint unsigned
2)value - того типа, который должны иметь элементы массива
Массив хранится в следуюшем формате. Пусть к - максимальное число элементов вдоль одной размерности. Всего элементов к в степени N.
Для каждого элемента будет одна запись.
Index будет принимать значения от одного до к в степени N.
Y(x1,..xn) храним в поле value записи с index, равным x1*k^0 +x2^k^1+...+xN*k^(N-1)
Для добавления массива просто копируем столбец value k раз и продолжаем индексы.
Размерность придется хранить где-то отдельно.
Выражения k^i можно где-то закешировать.
...
Рейтинг: 0 / 0
14.07.2008, 11:55
    #35428185
Йуный джавистЪ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как проектировать N-мерный массив
Исправляю 3 с конца строчку:
Для увеличения размерности на 1 просто копируем столбец value k раз и продолжаем индексы.
...
Рейтинг: 0 / 0
14.07.2008, 12:01
    #35428204
Йуный джавистЪ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как проектировать N-мерный массив
Еще добавлю, что число элементов по одной размерности можно округлить до степени двойки, и вычислять те числа битовыми операциями.
Кроме того, по полю индекс должен быть сделан кластерный индекс(сорри за тавтологию:))
...
Рейтинг: 0 / 0
14.07.2008, 12:36
    #35428328
Кот Матроскин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как проектировать N-мерный массив
Я бы сделал классическим образом

dimension( DimensionID )
DimensionIindex (DimensionId, Index, CellID)
Value (CellID , Value)

На DimensionId {DimensionId, Index} - PK, + constraint "Для каждого Cellid нет повторяющихся DimensionID"
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / как проектировать N-мерный массив / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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