2017-01-09 1 views
1

私は、DBの設計を以下しているが(ちょうど不可欠な情報を保持):1つの列から別の表を参照する方法は?

TABLE monument 
    PRIMARY KEY id 
    name 

TABLE restorer 
     PRIMARY KEY id 
     name 

TABLE project 
     PRIMARY KEY id 
     name 

TABLE restorer2project 
    FOREIGN KEY restorer_id REFERENCES restorer(id), 
    FOREIGN KEY project_id REFERENCES project(id) 
    PRIMARY KEY (restorer_id, restoration_project_id) 

TABLE monument2project 
    FOREIGN KEY monument_id REFERENCES monument(id) 
    FOREIGN KEY project_id REFERENCES project(id) 
    PRIMARY KEY (monument_id, project_id) 

プロジェクトは、多くのレストアを持っているし、多くのmonuments.Alsoプロジェクトが同じ関係が、異なる日付で、将来的に繰り返すことができますすることができます。 私はテーブルウィッチを作成して写真を保存したいと思います。

TABLE picture 
     PRIMARY KEY id 
     reference_to_different_tables 

1つの列と異なる表を指すことは可能ですか? はいの場合? この良いデザインです(写真でもっと多くのテーブルを作成することは想像できます)

他の方法は他のテーブルの画像を参照することですが、何らかのマッピングテーブルが必要ですそれも良いデザインであれば確かめてください。

+2

私は 'picture'テーブルに3つの列を追加するだけです。 'project_id'はヌル可能ではなく、' restorer_id'はヌル可能ではなく、 'monument_id'はヌル可能です – CptMisery

+0

@CptMisery:一つは、データの整合性を手作業で処理しなければならないということです。それほどユニークなデザインパターンではなく、 –

答えて

0

データベースからは、異種のテーブルを参照することはできません。 一度に1つのテーブルを参照できます。私は考えることができる3つのソリューションが存在することができ :

  1. 私の意見では最良の解決策は、親テーブルを持つことであるartifactmonumentに、restorerprojectを言います。後の3つのテーブルは、artifactテーブルからの外部キーとして主キーを持ちます。この方法では、artifactテーブルを参照する単一列のピクチャテーブルを持つことができます。
  2. また、コメント内の@CptMiseryで示唆されているように、pictureテーブルに複数の列を指定することもできます。
  3. すべての画像テーブルを作成します。これは良い解決策ではありません。

永続性フレームワークを使用している場合は、最初のソリューションよりも動的クエリの問題も解決できます。

関連する問題