2012-03-22 3 views
0

Дизайн базы данных, имеющейся у меня на данный момент, содержит две разные таблицы, содержащие информацию, требуемую для определенного поля внутри одной из таблиц.SQL определение продолжительности с использованием внешнего ключа

create table EventInfo (
    id   serial NOT NULL CHECK (id > 0), 
    title  LongNameValue NOT NULL, 
    startingTime timestamp, 
    duration 
    primary key (id), 
    foreign key (e_id) references Event(id) 
); 

create table Events (
    id   serial, 
    endTime timestamp, 
    primary key (id), 
}; 

мой вопрос,

возможно иметь duration поле рассчитывается из endTime - startingtime? Кроме того, как бы вы это сделали? Я думал об использовании interval. Любая помощь будет оценена!

+1

Какую базу вы используете? Также, пожалуйста, разместите запрошенные вами вопросы. –

+0

Почему вы делаете две таблицы? Основываясь на ваших двух таблицах, я думаю, что вы можете создать только одну таблицу, этого достаточно. Просто добавьте endTime в EventInfo. Любая конкретная причина, по которой вы делаете две таблицы? –

+0

* Почему * начальное и конечное время в разных таблицах? Что это означает, если есть две строки 'EventInfo' с разными временами запуска, для одной строки« События »? –

ответ

0

Вычисляемая колонка может быть создана только из столбца той же таблицы.

не возможно с двумя различными таблицами

+0

хорошо, * может * и * обязательно * отличается, но слышу. вы можете сделать это в PostgreSQL, но производительность будет немного раздражающей. –

1

При создании базы данных вы должны иметь в виде, что только примитивные нормированные данные должны идти к столам Его.

Когда у вас есть «рассчитанные» данные, хранящиеся в таблицах, вы можете попасть в ситуации несоответствий.

Рассчитанные данные должны отображаться в виде представлений, процедур или даже на уровне приложения.

Сказала, что если я вас я поставил EndTime в EventInfo таблицы и построить вид с вычисленным длительности колонки.

0

Вы можете посмотреть функции для этого. Если вы:

CREATE FUNCTION duration("EventInfo") RETURNS interval LANGUAGE SQL AS 
    $$ SELECT .... $$; 

Тогда вы можете:

SELECT e.duration FROM "EventInfo" e; 

И он будет работать, как ожидалось.

Смежные вопросы