0

m2m 関係で接続された 2 つのテーブルがあります。

CREATE TABLE words 
    (
    id INT PRIMARY KEY, 
    word VARCHAR(100) UNIQUE, 
    counter INT
    )

CREATE TABLE urls 
    (
    id INT PRIMARY KEY, 
    url VARCHAR(100) UNIQUE
    )

CREATE TABLE urls_words 
    (
    url_id INT NOT NULL REFERENCES urls(id), 
    word_id INT NOT NULL REFERENCES words(id)
    )

単語テーブルにカウンターフィールドがあります。特定の単語で urls_words に格納されている行の数を計算するカウンター フィールドを更新するプロセスを自動化するにはどうすればよいですか。

4

2 に答える 2

2

この値を保存する理由を調査します。正当な理由があるかもしれませんが、トリガーはデータベースを複雑にします。

これが「load-then-query」データベースの場合、データをロードするときにカウントを更新できます。おそらく、1 日 1 回または 1 週間に 1 回などの頻度で更新できます。トリガーについて心配する必要はありません。

これがトランザクション データベースの場合は、トリガーが必要になり、処理が複雑になります。また、テーブルをロックしたくない場合でもテーブルをロックします。

別の方法は、 にインデックスを付けることurls_words(word_id, url_id)です。これにより、必要なときにカウントの計算が大幅に高速化されます。また、更新中に複数のテーブルでトリガーやロックを行う必要もありません。

于 2013-06-25T10:59:16.137 に答える
0

urls_words テーブルにトリガーを作成し、変更 (更新、挿入、削除など) が行われるたびに、words テーブルのカウンター列を更新します。

于 2013-06-25T09:36:38.790 に答える