可以使用检查约束(或其他某种技术)来防止在记录更新时设置与先前值相矛盾的值。
一个示例是NULL时间戳,指示发生了某些事情,例如“ file_exported”。一旦文件已导出并且具有非NULL值,则永远不要再次将其设置为NULL。
另一个例子是计数器,其中只允许增加整数,而不能减少整数。
如果有帮助,我正在使用postgresql,但我想查看适合任何SQL实现的解决方案
一个示例是NULL时间戳,指示发生了某些事情,例如“ file_exported”。一旦文件已导出并且具有非NULL值,则永远不要再次将其设置为NULL。 另一个例子是计数器,其中只允许增加整数,而不能减少整数。
在这两种情况下,我都不会将这些更改记录为带注释的表中的属性。“导出”或“命中计数”是一个独特的概念,表示与它们相关的对象的相关但正交的现实世界概念:
因此,它们将仅仅是不同的关系。由于我们只希望“ file_exported”发生一次:
CREATE TABLE thing_file_exported( thing_id INTEGER PRIMARY KEY REFERENCES(thing.id), file_name VARCHAR NOT NULL )
命中计数器类似地是不同的表:
CREATE TABLE thing_hits( thing_id INTEGER NOT NULL REFERENCES(thing.id), hit_date TIMESTAMP NOT NULL, PRIMARY KEY (thing_id, hit_date) )
您可能会查询
SELECT thing.col1, thing.col2, tfe.file_name, count(th.thing_id) FROM thing LEFT OUTER JOIN thing_file_exported tfe ON (thing.id = tfe.thing_id) LEFT OUTER JOIN thing_hits th ON (thing.id = th.thing_id) GROUP BY thing.col1, thing.col2, tfe.file_name