我的表如下所示:
CREATE TABLE IF NOT EXISTS `entry_title` (
`entry_title_id` int(11) NOT NULL AUTO_INCREMENT,
`entry_id` int(11) NOT NULL,
`accepted` tinyint(1) DEFAULT NULL,
`entry_title_lang` char(2) CHARACTER SET ascii NOT NULL,
`entry_title_value` varchar(255) NOT NULL,
`entry_title_created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`entry_title_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
表中的一行代表网站内容的标题。
这个想法是任何人都可以提交一个新的(希望改进的)标题。
然后社区接受或放弃更改。
如果接受标志等于NULL
这表示更改正在等待社区审核。0 被解释为丢弃,1 被接受。
该网站显示最新的标题,timestamp
其中接受的标志等于1
。
当一项更改正在等待审核时,在未决更改被接受或拒绝之前,我无法提交其他更改。
因此,我希望在我的数据库中设置一个约束,以确保每个entry_id
值为 is 的位置accepted
只有一行NULL
。
我考虑过使用一个单独的字段pending_review
,它是1
orNULL
并将 UNIQUE 约束与entry_id
.
这样做的问题是,当更改被接受或拒绝时,我会以某种方式需要取消设置该字段,并且该级别的一致性将需要另一个约束,这种约束会导致与上述更简单的解决方案相同的问题。