2012-03-22 49 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

你正在使用什麼數據庫?此外,請發佈您嘗試過的查詢 – 2012-03-22 08:32:25

+0

爲什麼要製作兩張表?根據你的兩張表,我認爲你只能創建一張表,這就夠了。只需將endTime添加到EventInfo。你製作兩張桌子的任何特殊原因? – 2012-03-22 08:34:17

+0

*爲什麼*是不同表格中的開始和結束時間?如果有兩個具有不同開始時間的'EventInfo'行,對於單個'Events'行,它甚至意味着什麼? – 2012-03-22 08:35:29

回答

0

計算列只能從同一張表的列中生成。

它不可能有兩個不同的表

+0

好吧,*可*和*應*不同,但我聽到你的聲音。你可以在PostgreSQL中做到這一點,但性能會有點煩人。 – 2012-09-27 01:25:08

1

當你設計你的數據庫,你應該牢記,只有原始的標準化的數據應該在對錶。

當您將「計算」數據存儲在表中時,可能會出現不一致情況。

計算的數據應該進入視圖,過程或應用程序級別。

說,如果我是你,我把結束時間EventInfo表,並建立與計算時間列的視圖。

0

你可以看功能來做到這一點。如果您:

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

然後,您可以:

SELECT e.duration FROM "EventInfo" e; 

它將按預期工作。