SQL自我计算字段

时间:2013-06-25 09:22:50

标签: sql database sqlite database-design

我有两个通过m2m关系连接的表。

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 个答案:

答案 0 :(得分:2)

我会调查您为什么要存储此值。可能有充分的理由,但会导致数据库复杂化。

如果这是一个“加载然后查询”数据库,那么您可以在加载数据时更新计数 - 可能是某些频率,例如每天一次或每周一次。您无需担心触发器。

如果这是一个事务数据库,则需要触发器,这会增加处理的复杂性。当你可能不希望它们被锁定时,它们也会锁定表。

另一种方法是在urls_words(word_id, url_id)上建立一个索引。这将大大加快您需要时计算的次数。在更新期间,它也不需要多个表上的触发器或锁。

答案 1 :(得分:0)

在urls_words表上创建一个触发器,每次进行更改(即更新,插入,删除)时,都会更新单词表上的计数器列。