0

Webアプリケーションで、次のように定義された単一の結合テーブルに依存するリレーションシステムを作成しようとしています。

CREATE TABLE associations (
  associationId SERIAL PRIMARY KEY,
  fromTable varchar(255),
  fromId int,
  toTable varchar(255),
  toId int  
);

次に(fromTable, fromId, toTable, toId)、行ごとに一意になるように作成する必要がありますが、必要なのは、これら4つのフィールドに単純な一意の制約を作成するほど簡単ではありません。

たとえば、このクエリが必要になります

INSERT INTO associations (fromTable, fromId, toTable, toId)
VALUES ('table1', 1, 'table2', 2);

テーブルにタプルまたはの行がすでに含まれている場合は失敗します('table1', 1, 'table2', 2) ('table2', 2, 'table1', 1)

制約を介してこれを達成することは可能ですか、それともデータを挿入する前に手動でチェックを実装する必要がありますか?

編集:

@Germann Arlingtonは、トリガーを使用して両方の方法でリレーションを挿入することを提案しましたが、トリガーをトリガーしたのと同じテーブルに挿入を行うと、これは無限のトリガーループを引き起こしませんか?

4

0 に答える 0