1

私はPHPとPostgreSQLの初心者です,,,,

次のクエリでテーブルを作成しました、、、

CREATE TABLE public.affiliate (
  id INTEGER NOT NULL,
  name VARCHAR(32),
  parent INTEGER,
  CONSTRAINT affiliate_pkey PRIMARY KEY(id)
);

ここでは、id が 1 から始まり、残りのノードに順番に番号が付けられ、深さの最大数が 10 に設定されるように、テーブルにデータを入力しました。

ここで、循環階層を作成する挿入または更新に対してテーブルを制約する必要があります。どうやってやるの ?

4

1 に答える 1

1

ビジネス目的で自動生成された識別子に依存することはありません。これは、解決するよりも多くの問題につながることがよくあります。テーブルの変更に関する制約については、ルール システムを参照してください。

クエリをオンザフライで書き換えることができます。

CREATE RULE prevent_insert AS 
  ON INSERT 
  TO public.affiliate 
  DO INSTEAD 
    NOTHING;

これにより、指定されたテーブルへの挿入が防止されます。もちろん、これはエラーを発生させないため、トランザクションを無効にしないため、制約とまったく同じようには動作しません。

于 2012-12-03T09:38:27.243 に答える