2012-03-22 16 views
0

私が現在持っているデータベースの設計には、テーブルの1つの特定のフィールドに必要な情報を保持する2つの異なるテーブルがあります。私の質問がある外部キーを使用して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

なぜ2つのテーブルを作成するのですか?あなたの2つのテーブルに基づいて、私はあなたが1つだけテーブルを作成することができると思う、それで十分です。 EventTimeにendTimeを追加するだけです。 2つのテーブルを作る特別な理由は何ですか? –

+0

*なぜ、*異なるテーブルの開始時間と終了時間ですか? 1つの 'Events'行に対して、異なる開始時刻を持つ2つの' EventInfo'行がある場合、それはどういう意味ですか? –

答えて

0

計算列は、同じ表の列からのみ生成できます。あなたのデータベースを設計するとき

二つの異なるテーブルとそのない可能

+0

よく、* can *と* should *は違うが、私はあなたのことを聞いている。 PostgreSQLでこれを行うことができますが、パフォーマンスは少し面倒です。 –

1

あなただけの原始的な正規化されたデータは、テーブルに行く必要があることを心に留めておく必要があります。

テーブルに "計算された"データが格納されていると、不整合な状況に陥る可能性があります。

計算されたデータは、ビュー、プロシージャ、またはアプリケーションレベルにも移動する必要があります。

は私があなただった場合、私はEventInfo表にendTimeはを入れて計算し期間列を持つビューを構築することを述べました。

0

これを行うための関数を見ることができます。あなたの場合:

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

次に、あなたがすることができます:予想通り

SELECT e.duration FROM "EventInfo" e; 

そして、それは動作します。

関連する問題