2012-01-18 16 views
1

データベース:SybaseのASE 15.0.3テーブル内の累積フィールドが必要

テーブル:

authors(int author_id, varchar(20) author_name) 
books(int author_id,int number_of_pages) 

私は和(total_number_of_pages用テーブル「著者」に新しいフィールドを追加する必要があります著者が書いたすべての書籍のページ数)。

これは、(おそらくマテリアライズされた)計算フィールドで行うことができますか?

私はビューのアイデアは好きではありませんが、可能であれば、テーブル作成者のフィールドが本当に好きです。

+0

なぜこれをやりたいですか?あなたのテーブルには何本の本がありますか? –

+0

新しい版の本がDBに入力されたとき、何をしたいですか? – wildplasser

+0

@wildplasser:書籍の行が挿入、削除、更新されたときに合計が更新されます。 –

答えて

1

適切なインデックス(author_id)を使用すると、Viewソリューションは実際には非常に高速になるはずです。それは単なる集約です。著者ごとに数百または数千の書籍がない限り、これはまったく問題ではありません。 (私は著者あたりの本の平均数は、下または10の周りにあることを期待?)


あなた本当にがこれを最適化し、キャッシュされた値を格納する必要がある場合、私はトリガーをお勧めします。

ブックが追加、削除、または更新されると、ブックテーブルでauthorsテーブルの値が適切に変更されます。可能な限り再計算が最小限であることを意味します。

これの欠点は、デザインの複雑さと相互依存性の増加です。

+0

はい、私は本当に作者のフィールドが必要です。少なくとも、それは誰かがそれを照会するときのように見えるはずです。 トリガーが最適な解決策だと思われますが、私が本の定義に触れることなく(トリガーで)この結果を得ることができればさらに良いでしょう。 –