2017-01-09 31 views
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 

是否有可能指向一列中的不同表格? 如果是的話怎麼樣? 這是很好的設計(來回我很自然,我可以想象創建更多的表與圖片)

其他方法是引用其他表的圖片,但然後我需要某種映射表,但不當然,如果這也是很好的設計。

+2

我只是在'picture'表中添加3列。 'project_id'不可爲空,'restorer_id'不可爲空,'monument_id'可爲空 – CptMisery

+0

@CptMisery:有一件事是我必須處理數據完整性manualy,其他我認爲應該有更直接的解決方案,因爲這看起來像我沒有那麼獨特的設計模式被緩解 –

回答

0

從數據庫檢索你不能有一個外部引用不同的表。 它可以一次引用一張表。 可以有三種解決方案,我能想到的:

  1. 在我看來,最好的解決辦法是有一個父表說artifactmonumentrestorerproject。後面的三個表將主鍵作爲來自artifact表的外鍵。這樣你可以在圖片表中有單列,這將參考artifact表。
  2. 或者您可以在picture表中指定多個列,如@CptMisery在註釋中所建議的那樣。
  3. 爲它們全部創建多個圖片表。這不被認爲是好的解決方案。

如果您使用的是任何持久性框架,那麼第一個解決方案也可以解決動態查詢問題。

相關問題