SQL, определяющий продолжительность с использованием внешнего ключа - PullRequest
0 голосов
/ 22 марта 2012

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

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. Любая помощь будет оценена!

Ответы [ 3 ]

1 голос
/ 22 марта 2012

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

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

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

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

0 голосов
/ 26 сентября 2012

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

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

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

SELECT e.duration FROM "EventInfo" e;

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

0 голосов
/ 22 марта 2012

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

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

...