課したい2つの制約についていくつかのことがあります:
-
新しく挿入された行は、Parent_group列にNULL値を持つことはできません。
- 列にNULL以外の値がすべて含まれている場合にのみ、列にNOTNULL制約を課すことができます。ルートノードのこの列にはnull値が必要です。
- このために、CHECK制約を使用できます。 CHECKCONSTRAINTの詳細を読む
ここ 。 - 置くことができます
これにより、ルートノードに対してのみNULL値が許可され、テーブル内の他のすべての行に対してNOTNULL値が適用されます。
-
RootGroup行を削除できないように制約を追加します。
-
parent_group
の間に外部キーをすでに定義していること およびpkey
、データベースは自動的に参照整合性を適用し、ルートノード(または、さらに言えば、親ノード)の削除を禁止します。親ノードまたはルートノードでDELETEを試行すると、データベースはエラーを返します。
-
-
編集で言及された点について セクションでは、
CHECK (parent_group != pkey)
のような単純なチェック制約をテーブルに設定できます。 。これでうまくいくはずです。
外部キー制約を定義する方法と、それらを使用して参照整合性を適用する方法について説明します。また、上記のリンクまたはここ これらの提案を適用する前に。