2017-04-02 3 views
-2

ここで状況は、私はpostgresqlを使ってデータベースを設定しています。私のデータベースにはリーグがあり、リーグに関連したチームがいくつかあります。特定のリーグに関連付けることのできるチームの最小数はどのように設定できますか?postgresql与えられたテーブルで利用可能な外部キーの数を制限する

+0

最小値を指定することはほとんどありません。 – zerkms

+2

それをデータベース制約(各リーグはNチームがなければならない)にしても、Nが1より大きいと仮定して、新しいリーグにどのようにチームを追加しますか?このようなデータベースの制約は、多くの予期しない方法で人生を困難にする可能性があります。 –

答えて

0

これは制約として設定しません。代わりに、これをフラグとしてレベルに設定することができます。このフラグは、リーグがアクティブになるのに十分なチームがあるかどうかを指定します。

フラグを維持する1つの方法は、リーグを変更する方法でチームを挿入、削除、または更新するたびにトリガーを使用して値を更新することです。

1

トリガーでこれを行うことができます。チームを追加するとき(INSERT ed)、チームを変更するために(DELETEd)またはUPDATEdを削除した場合、変更のタイプに応じて、トリガーでSELECT 1 FROM league WHERE league_id = NEW.team_id FOR UPDATEに関連するリーグの行を新規チームおよび/または古いチームにロックする必要があります。

次に、AFTERトリガーは、制約が満たされているかどうかを確認するためにCOUNTクエリを実行し、そうでない場合は、RAISEを例外とします。

リーグに「アクティブ」または「非アクティブ」をマークするフィールドが必要です。このフィールドは、アクティブなときにのみ制約がチェックされます。そうでなければ、最初の数チームを作成できません。

関連する問題