0

我有两个通过 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 中存储了多少行与特定单词。

4

2 回答 2

2

我会调查你为什么要存储这个值。可能有充分的理由,但触发器会使数据库复杂化。

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

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

另一种方法是在urls_words(word_id, url_id). 这将在您需要时大大加快计数的计算速度。它也不需要在更新期间对多个表进行触发器或锁定。

于 2013-06-25T10:59:16.137 回答
0

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

于 2013-06-25T09:36:38.790 回答