0

デッキと呼べるテーブルがあります。Decksには、他のいくつかの属性とともに主キーとして使用されるIDがあります。カードテーブルには、デッキIDへの外部キー参照が含まれ、cardidの主キーも含まれています。外部キーがcardidであるanswersと呼ばれる別のテーブルが存在します。

したがって、デッキから削除するには、データベースでは、最初に回答から削除し、次にカードから削除し、最後にデッキから削除する必要があります。

1回目と2回目の削除を処理するトリガーを作成して、デッキを完全に破棄するためにデッキテーブルから削除ステートメントを指定するだけでよいようにします。

以下は私が見つけたPostgreSQLトリガーの例ですが、この方法でトリガーを作成している人の例をオンラインで見つけることができないため、私が求めていることを実行できるかどうかはわかりません。

CREATE OR REPLACE FUNCTION autoCalculate() RETURNS TRIGGER AS $$
        BEGIN

        IF NEW.wins < 0 THEN
                RAISE EXCEPTION 'Wins cannot be negative';
        END IF;

        IF(OLD.wins <> NEW.wins_ OR (OLD.losses <> NEW.losses) THEN
                NEW.Winning_Percentage := calc_winning_percentage(NEW.Wins, NEW.Losses);
        END IF

        RETURN NEW;
        END;
$$ LANGUAGE plpgsql;

DROP TRIGGER update_winning_percentage ON standings;
CREATE TRIGGER update_winning_percentage BEFORE INSERT OR UPDATE ON standings
FOR EACH ROW EXECUTE PROCEDURE autoCalculate();

誰かがこれを行うための知識を持っているなら、彼らが私を正しい方向に動かすか、これを行う方法の例を提供することができれば、私は感謝するでしょう!

4

2 に答える 2

0

外部キー定義で ON DELETE CASCADE を使用すると、これが処理されます

于 2012-11-06T22:19:52.223 に答える
0

Postgres 8.2 ではOn Delete Casacde、外部キー関係をいつ定義するかを指定できます。

http://www.postgresql.org/docs/8.2/static/ddl-constraints.html

于 2012-11-06T22:18:21.583 に答える