チェック制約でSQLサブクエリを作成できますか?
列のあるpost
テーブルを持っています_id, owner
_
別のテーブルaction
に列__user_id, post_id
_があります
表user
列id
_post_id -> post.id
_および_user_id -> user.id
_も_post.owner -> user.id
_
次に、action
に対してpost(post_id).id != user_id
を制約します
そんなことがあるものか ?
CHECK制約で現在の行を超えて調べることはサポートされていません。
http://www.postgresql.org/docs/9.1/interactive/sql-createtable.html 言う:
列制約として指定されたチェック制約はその列の値のみを参照する必要がありますが、テーブル制約に現れる式は複数の列を参照できます。
現在、CHECK式にはサブクエリを含めることも、現在の行の列以外の変数を参照することもできません。
この制限には正当な理由がありますが、交通量の多い一輪車に乗っているときに炎のようなトーチを操作したい場合は、関数を使用して制限を覆すことができます。これがしない状態に戻ってあなたを噛まない状況はまれです。代わりに、トリガーコードの不変条件を適用する方がはるかに安全です。
http://www.postgresql.org/docs/9.1/interactive/triggers.html