|
|
|
Помогите правильно организовать БД
|
|||
|---|---|---|---|
|
#18+
Всем привет! Помогите правильно организовать БД Есть таблица, которая содержит информацию об объектах. Одна из характеристик объекта - это временной интервал хранимый в виде двух значений. Одно значение дата и время начала интервала, второе значение - продолжительность в минутах. Задача: обеспечить уникальность интервалов. Они не должны повторятся, пересекаться или быть частью другого интервала. Значение начала интервала кратно 15 мин. Длина интервала обычно не превышает 2-х суток. Используемая СУБД - Oracle (думаю, для принципиального решения это не важно). Я хочу решить задачу создав таблицу хранящую интервалы для каждого объекта в виде последовательности значений (дата и время) с интервалом в 15 мин., т.е интервал: [15-07-2009 08:30,15-07-2009 09:30] будет храниться в виде последовательности: 15-07-2009 08:30 15-07-2009 08:45 15-07-2009 09:00 15-07-2009 09:15 15-07-2009 09:30 Поле хранящее значения имеет ограничение уникальности, что автоматически решает задачу. Однако возникает проблема с накоплением огромного объема ненужных данных. За год это ~35 000 записей по объектам для одной единицы. В реальных условиях за год может накапливаться до 500 000 записей. Таблица с объектами будет активно использоваться, в том числе и для визуального представления данных и такой объем данных однозначно отразиться на производительности. Возможно существует другой способ эффективно решить эту задачу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2009, 14:03 |
|
||
|
Помогите правильно организовать БД
|
|||
|---|---|---|---|
|
#18+
goodveen, да, существует. если S и E - одна запись в таблице (начало и конец интервала), то примерно так: select * from T x where exists(select * from T where x.S > S and x.S < E) это для интервалов, начало которых попадает в другой временной интервал. Дальше можете додумать сами или поискать по сайту - в фак загляните - скорее всего, там может лежать вариант ответа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2009, 16:50 |
|
||
|
Помогите правильно организовать БД
|
|||
|---|---|---|---|
|
#18+
goodveenОни не должны повторятся, пересекаться То есть как для начала, так и для конца конкретного интервала не существует другой записи в этой таблице, где он входит в отрезок от начала до конца. При наличии индексов эта проверка (даже в триггере) "летает" даже на достаточно больших объемах, ибо тривиальна для сервера. goodveenили быть частью другого интервала Тут можно поступить по другому, с точностью до наоборот. Ибо всегда если интервалы пересекаются, начало или конец одного лежит внутри другого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2009, 17:44 |
|
||
|
|

start [/forum/topic.php?fid=32&fpage=85&tid=1543150]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
49ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 235ms |
| total: | 363ms |

| 0 / 0 |
