1

私のテーブルスキーマは次のとおりです。

 r(int aID not null, int bID not null, bool main)

主キー(aId、bID)。aIDとbIDはどちらも外部キーです(異なるテーブルを参照します)。

すべてのaIDに対して、main=trueでもあるbIDが常に1つだけ存在することを強制したいと思います。

どうすればdbレベルでそれを行うことができますか?を追加することで「最大1」を強制できconstraint unique (aID, main)、mainはtrueまたはNULLのいずれかです。

「少なくとも1つ」の部分はどうですか?

PS:MySQLに取り組んでいます。

編集:明確化のためのデータの例:aIDとbIDのさまざまな組み合わせを使用できますが、各aIDについて、main=trueを持つ組み合わせは1つだけです。デモデータ:

 1, 2, true
 1, 3, NULL
 1, 4, NULL
 1, 5, true <- wrong, only one main=true
 ...
4

1 に答える 1

0

2 つのトリガーを作成する必要があります。どちらも各行に適用されます。1 つ目は挿入前に適用され、2 つ目は更新前に適用されます。main=true で、テーブル内に new.aID と同じ aID を持ち、bID が異なり、main = true の行が少なくとも 1 つある場合は、new.main = false に設定します。

ほとんどの RDBMS では単一のトリガーでこれを行うことができますが、MySQL は (私が間違っていなければ) 挿入と更新の両方に適用できるトリガーをサポートしていません。

于 2012-03-20T12:46:40.957 に答える