回答

收藏

SQL约束,以防止基于列的先前值更新列

技术问答 技术问答 196 人阅读 | 0 人回复 | 2023-09-12

在记录更新时,可以使用检查约束(或其他技术)来防止与之前的值相矛盾。9 Q, ~3 V4 B; V- ^2 B% h- q
一个示例是NULL时间戳,指示发生了什么,比如 file_exported。一旦文件被导出并且有非非NULL永远不要再把它设置为值NULL。5 _* v+ X. j; z9 z: H5 P
另一个例子是计数器,其中只允许增加整数,而不能减少整数。) F5 ?( C+ v! m, |# h* a! N
如果有帮助,我正在使用它postgresql,但是我想检查任何合适的东西SQL实现的解决方案
7 g9 }, w' r& ^. D5 I" o2 ]                                                               
( Y* O& ~3 m& j6 b    解决方案:                                                                " d3 Z6 H0 v$ }: v
                                                                一个示例是NULL时间戳,指示发生了某些事情,例如“2 z! j4 `( F* ?# v
file_exported。一旦文件被导出并且有非非NULL永远不要再把它设置为值NULL。' y# `% n9 z- }6 i1 y8 e6 R! }
另一个例子是计数器,它只允许增加整数,而不是减少整数。
' z( \& D5 }( `- h在这两种情况下,我不会将这些变化记录为带注释的表中的属性。导出或命中计数是一个独特的概念,表示与它们相关的对象相关但积极的现实世界概念:8 J" T- o' B- v8 _7 T
因此,它们只会有不同的关系。因为我们只想 file_exported一次:) {, O* r+ r* R) ]2 l* z9 t
CREATE TABLE thing_file_exported(    thing_id INTEGER PRIMARY KEY REFERENCES(thing.id),   file_name VARCHAR NOT NULL)类似地,命中计数器是不同的表:& T8 t* E- i! u: C1 A8 {6 P
CREATE TABLE thing_hits(    thing_id INTEGER NOT NULL REFERENCES(thing.id),   hit_date TIMESTAMP NOT NULL,   PRIMARY KEY (thing_id,hit_date))您可能会查询( `# \0 ~% X/ M2 q
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
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则