我有两个通过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中存储的特定字的行数。
答案 0 :(得分:2)
我会调查您为什么要存储此值。可能有充分的理由,但会导致数据库复杂化。
如果这是一个“加载然后查询”数据库,那么您可以在加载数据时更新计数 - 可能是某些频率,例如每天一次或每周一次。您无需担心触发器。
如果这是一个事务数据库,则需要触发器,这会增加处理的复杂性。当你可能不希望它们被锁定时,它们也会锁定表。
另一种方法是在urls_words(word_id, url_id)
上建立一个索引。这将大大加快您需要时计算的次数。在更新期间,它也不需要多个表上的触发器或锁。
答案 1 :(得分:0)
在urls_words表上创建一个触发器,每次进行更改(即更新,插入,删除)时,都会更新单词表上的计数器列。