|
|
|
как проектировать N-мерный массив
|
|||
|---|---|---|---|
|
#18+
Есть N измерений, Их число не фикированно - они могут добавляться и удаляться. Хочется хранить массив Y(x1.....xN), где x1....xN - натуральные числа Если количество измерений увеличивается до N+1, то первоначально Y(x1.....xN+1) = Y(x1.....xN) при любом xN+1 Единственное, что я придумал - это хранить таблицу f1......fN, value, где f1...fN - название ключевых полей, а value - значение. Но при добавлении измерения таблицу надо будет менять, что плохо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2008, 13:24 |
|
||
|
как проектировать N-мерный массив
|
|||
|---|---|---|---|
|
#18+
М.б., так? Операции удаления/добавления измерения на триггерах, например. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2008, 14:27 |
|
||
|
как проектировать N-мерный массив
|
|||
|---|---|---|---|
|
#18+
Не ясно, как понимать вот эту строчку Y(x1.....xN+1) = Y(x1.....xN)??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2008, 14:30 |
|
||
|
как проектировать N-мерный массив
|
|||
|---|---|---|---|
|
#18+
Надо сделать таблицу с 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 можно где-то закешировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2008, 11:52 |
|
||
|
как проектировать N-мерный массив
|
|||
|---|---|---|---|
|
#18+
Исправляю 3 с конца строчку: Для увеличения размерности на 1 просто копируем столбец value k раз и продолжаем индексы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2008, 11:55 |
|
||
|
как проектировать N-мерный массив
|
|||
|---|---|---|---|
|
#18+
Еще добавлю, что число элементов по одной размерности можно округлить до степени двойки, и вычислять те числа битовыми операциями. Кроме того, по полю индекс должен быть сделан кластерный индекс(сорри за тавтологию:)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2008, 12:01 |
|
||
|
как проектировать N-мерный массив
|
|||
|---|---|---|---|
|
#18+
Я бы сделал классическим образом dimension( DimensionID ) DimensionIindex (DimensionId, Index, CellID) Value (CellID , Value) На DimensionId {DimensionId, Index} - PK, + constraint "Для каждого Cellid нет повторяющихся DimensionID" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2008, 12:36 |
|
||
|
|

start [/forum/topic.php?fid=32&gotonew=1&tid=1543770]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
147ms |
get topic data: |
8ms |
get first new msg: |
5ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 201ms |
| total: | 424ms |

| 0 / 0 |
