2017-08-07 19 views
0

は私がやりたいものです。つまりPostgreSQLの機能外部キーはここ

create table stuff 
    (some_key varchar primary key, 
    some_data varchar) 
; 

create table obfuscated_stuff 
    (some_key_sha1 varchar references digest(stuff (some_key), 'sha1'), 
    other_data varchar) 
; 

、私がすることなく一方向ハッシュに基づいて、他のテーブルへの外部キーを設定したいのですがそのハッシュを元のテーブルに置きます。

これはポリシー/規制要件です。私はFK制約なしで "obfuscated_stuff"テーブルを構築することができますが、私はむしろそこに持っています。

FK制約内の関数を使用すると表示されません。私はまた、FKを(それに機能を持つかもしれない)ビューにすることはできません。その他の提案はありますか?

+0

究極の目標は何ですか? idを隠してから、バックグラウンドでテーブルを結合するだけではありませんか?難読化されたものの目的はなんですか?通常、このようなものは許可と良いバックエンドエンジニアリングでうまくやっています。 –

+0

政策立案者は、2つのデータセットを明示的に結合することは望ましくありません。親テーブルで関連する列レベルの権限が既にロックされています。子テーブルにデータを挿入するプロセスでは、親テーブルの行に戻って参照が必要です。私はむしろ参照が有効であることを保証する制約を含んでいます。 – rotten

+0

難読化された子テーブルに 'some_key_sha1'を挿入する際に' some_key'を知っていますか? –

答えて

1

現在のdocumentationによると、これを行うことはできません。列名または列名のグループのみが許可されます。

あなたは正しく、ビュー上でFKを作成することはできません。マテリアライズド・ビューにも該当します。

リファラー列のBEFORE INSERT/UPDATEに、参照されたインデックス付き列をチェックするトリガを作成できます。違反した場合は、NULLまたは例外を返します。参照されるテーブルのPKでは、ハッシュ値を使用してインデックスを作成することもできます。

+0

ありがとうございます。制約を執行するトリガーは考えていませんでした。私はそれを考えます。興味深い考え。 – rotten

関連する問題