powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Помогите правильно организовать БД
4 сообщений из 4, страница 1 из 1
Помогите правильно организовать БД
    #36082036
goodveen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!
Помогите правильно организовать БД

Есть таблица, которая содержит информацию об объектах. Одна из характеристик объекта - это временной интервал хранимый в виде двух значений. Одно значение дата и время начала интервала, второе значение - продолжительность в минутах.

Задача: обеспечить уникальность интервалов. Они не должны повторятся, пересекаться или быть частью другого интервала. Значение начала интервала кратно 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 записей. Таблица с объектами будет активно использоваться, в том числе и для визуального представления данных и такой объем данных однозначно отразиться на производительности.

Возможно существует другой способ эффективно решить эту задачу?
...
Рейтинг: 0 / 0
Помогите правильно организовать БД
    #36082630
Фотография Roman S. Golubin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
goodveen,

да, существует.

если S и E - одна запись в таблице (начало и конец интервала), то примерно так:

select *
from T x
where exists(select * from T where x.S > S and x.S < E)


это для интервалов, начало которых попадает в другой временной интервал. Дальше можете додумать сами или поискать по сайту - в фак загляните - скорее всего, там может лежать вариант ответа.
...
Рейтинг: 0 / 0
Помогите правильно организовать БД
    #36082849
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
goodveenОни не должны повторятся, пересекаться
То есть как для начала, так и для конца конкретного интервала не существует другой записи в этой таблице, где он входит в отрезок от начала до конца. При наличии индексов эта проверка (даже в триггере) "летает" даже на достаточно больших объемах, ибо тривиальна для сервера.

goodveenили быть частью другого интервала
Тут можно поступить по другому, с точностью до наоборот. Ибо всегда если интервалы пересекаются, начало или конец одного лежит внутри другого.
...
Рейтинг: 0 / 0
Помогите правильно организовать БД
    #36092065
goodveen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо за помощь.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Помогите правильно организовать БД
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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