チェック制約でSQLサブクエリを作成できますか?
列のあるpost
テーブルがあります列id, owner
のある別のテーブルがaction
あります列のあるuser_id, post_id
テーブルuser
id
post_id -> post.id
そしてuser_id -> user.id
またpost.owner -> user.id
post(post_id).id != user_id
今、私はテーブルに制約したいaction
そんなことがあるものか ?
チェック制約でSQLサブクエリを作成できますか?
列のあるpost
テーブルがあります列id, owner
のある別のテーブルがaction
あります列のあるuser_id, post_id
テーブルuser
id
post_id -> post.id
そしてuser_id -> user.id
またpost.owner -> user.id
post(post_id).id != user_id
今、私はテーブルに制約したいaction
そんなことがあるものか ?
CHECK制約で現在の行を超えて検索することはサポートされていません。
http://www.postgresql.org/docs/9.1/interactive/sql-createtable.htmlによると:
列制約として指定されたチェック制約は、その列の値のみを参照する必要がありますが、テーブル制約に表示される式は、複数の列を参照できます。
現在、CHECK式にサブクエリを含めることも、現在の行の列以外の変数を参照することもできません。
この制限には十分な理由がありますが、交通量の多い一輪車に乗っているときに燃えるような松明をジャグリングしたい場合は、関数を使用して制限を解除できます。これがあなたを噛むために戻ってこない状況はまれです。代わりに、トリガーコードで不変条件を適用する方がはるかに安全です。
http://www.postgresql.org/docs/9.1/interactive/triggers.html