2016-06-30 4 views
2

問題:ビューの列に外部キーを作成しようとしています。ビューは、私が使用している列に主キー制約を持つ別のスキーマからSELECT *として作成されました。ビューへの外部キーの作成

これは可能ですか?これは、これは悪い習慣と考えられていますか?そうでない場合は、代替手段がありますか? phpmyadminでは可能ではないようですが、ビューに主キーを作成することはできません。

理由:は、私は2つの異なるアプリケーションのための2つのスキーマを使用しますが、私はせずに、スキーマで再利用したい「ユーザー」テーブル(必ずしもmysql.userテーブル内のユーザ)1つのスキーマ内であり他のスキーマへのアクセス権を付与します。これが私がビューを使用した理由です。

答えて

1

いいえ。

MySQL Forums postを参照してください。参照されるテーブルで

ビューが実体化されている...参照 列が最初の列としてリストされているインデックスが存在する必要があります。それらはネイティブに最も左のインデックスを持つテーブルではありません。ビューはまた、時間のスナップショット(作成時)です。次の時間に使用されるまで知らずに、現在のスキーマに賛成できなくなります。だから、多くの理由から彼らはtargetと呼ばれているようにFKの使用の候補にはならない。

FAQ: Viewsマニュアルのページからビューが作成された後、定義が参照するテーブル またはビューを削除または変更することが可能です。この種の問題 のビュー定義をチェックするには、CHECK TABLEステートメントを使用します。

なぜ私はそれを呼び出すスナップショットの理由です。どの時点でもその妥当性は非常に損なわれる可能性があります。 FKでないを参照してください。

+1

賢明な意見の相違にかかわらず、これはあなたの質問に対する唯一の答えです。 – Drew

+0

お詫び申し上げますが、私はMySQLのすべてのビューが今後の研究まで「スナップショット」であることに気づいていませんでした。私はOracle DBの背景から来ています。 – Mocking

0

ビューを使用する代わりに、別の(共有の)スキーマを作成してそのテーブルに移動することができます。これにより、制限されたスキーマに対して単一のテーブル権限を付与することなく、テーブルを再利用できるようになります。 @Drewのように、ビューにインデックスを作成できないため、ビューに外部キー制約を作成することはできません。

関連する問題