2013-06-25 122 views
0

我有兩個表,它們通過m2m關係連接。SQL自我計算字段

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與特定的單詞。

回答

2

我會調查你爲什麼要存儲這個值。可能有很好的理由,但觸發器使數據庫變得複雜。

如果這是一個「隨後查詢」數據庫,那麼您可以在加載數據時更新計數 - 推測可能是某種頻率,例如每天一次或每週一次。你不需要擔心觸發器。

如果這是一個事務數據庫,則需要觸發器,這些會增加處理的複雜性。當你不想讓它們鎖定時,它們也會鎖定表格。

另一種方法是在urls_words(word_id, url_id)上有一個索引。這會在需要時大大加快計數的計算速度。在更新期間,它也不需要在多個表上觸發或鎖定。

0

在urls_words表上創建一個觸發器,該表在每次更改(即更新,插入,刪除)時更新單詞表上的計數器列。