私のテーブルは次のようになります。
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 ;
表の行は、Webサイトのコンテンツのタイトルを表します。
アイデアは、誰でも新しい(うまくいけば改善された)タイトルを提出できるということです。
次に、コミュニティは変更を受け入れるか破棄します。
承認されたフラグが等しい場合、NULL
これは変更がコミュニティによるレビューを保留していることを表します。0は破棄され、1は受け入れられたと解釈されます。
timestamp
Webサイトには、受け入れられたフラグがに等しい最新のタイトルが表示されます1
。
変更が保留中のレビューである場合、保留中の変更が承認または拒否されるまで、他の変更を送信することはできません。
entry_id
したがって、の値がである場所ごとに行のみが存在することを確認する制約がデータベースに必要accepted
ですNULL
。
pending_review
またはのいずれ1
かである個別のフィールドを使用することを考え、。NULL
と組み合わせてUNIQUE制約を設定しましたentry_id
。
それに関する問題は、変更が受け入れられるか拒否されるときに、どういうわけかそのフィールドの設定を解除する必要があり、そのレベルでの一貫性は、上記のより単純な解決策と同じ問題につながる別の制約を必要とすることです。