я создал таблицу следующим образом:Определить интервал при вводе значений в таблице
CREATE table screening
(
screening_id NUMBER(6,0) PRIMARY KEY,
plan_id NUMBER(4,0),
theatre_id NUMBER(1,0),
screening_date DATE,
screening_start_hh24 NUMBER(2,0) CHECK(screening_start_hh24 BETWEEN 9 AND 22),
screening_start_mm60 NUMBER(2,0) CHECK(screening_start_mm60 BETWEEN 0 AND 59),
CONSTRAINT fk_plan_id FOREIGN KEY(plan_id)
REFERENCES screening_plan(plan_id),
CONSTRAINT fk_theatre_id_screening FOREIGN KEY(theatre_id)
REFERENCES theatre(theatre_id)
)
«screening_start_hh24» для времени начала в час и «screening_start_mm60» для времени запуска в течение нескольких минут. Что мне делать, чтобы добавить разрыв не менее 30 минут между двумя последовательными экранами в одном и том же театре? Я использую оракул.
Это вообще не то, что вы определяете в декларативных ограничениях. Обычно это бизнес-правило, которое вы реализуете в хранимой процедуре, которая вставляет данные в эту таблицу. Кроме того, поскольку 'screening_date' является' date', он будет иметь по сути день и время. Нет смысла выделять время на два дополнительных столбца, предположительно устанавливая время на 'screening_date' до полуночи, а не просто устанавливая' screening_date' правильно. –
Я понимаю тот факт, что screening_date также будет иметь время. Вместо того, чтобы извлекать время с даты, которое будет использовать больше времени процессора, будет лучше добавить два столбца. Помимо хранимой процедуры, нет ли другого способа определить ее, создав таблицу? – BinaryTerror
Хранение времени отдельно нарушает в основном каждое правило нормализации. Я предполагаю, что вы провели бенчмаркинг, который показывает, что узкое место вашего приложения действительно извлекает время из столбца «date» и что эта денормализация действительно устраняет это узкое место. Невозможно создать ограничение, пересекающее строки. Вы можете создать материализованное представление 'on commit', которое хранит следующую дату скрининга в той же строке и помещает ограничение на материализованное представление, если вы действительно определились. –