2013-06-25 81 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表上创建一个触发器,该表在每次更改(即更新,插入,删除)时更新单词表上的计数器列。