2014-09-12 59 views
1

我對數據庫設計相當陌生。開始有四個表的新​​應用:Assiatance with SQL table relationship

Staff 
Vendors 
Projects 
ProjectSchedules 

ProjectSchedules是一個表,我們將派人項目。有時人們是員工,有時他們是供應商。如何使用一個(或更少?)列在ProjectSchedules表中爲員工和供應商建立關係?

重要的是要注意,供應商通常是一家公司(認爲人員配備公司)。

我已經做了,在過去類似的事情,但手工處理非鍵控關係:

SELECT ISNULL(Vendor.Name, Staff.FullName) AS Staff 
    FROM ProjectStaffing INNER JOIN Vendors, Staff, etc. 

你能告訴我,如果有更好的辦法?

+0

的可能重複(HTTP [外鍵指的跨多個表的主鍵?]:// stackover flow.com/questions/668921/foreign-key-refering-to-primary-keys-across-multiple-tables) – Drecker 2014-09-12 23:16:28

+0

查看此問題的最佳答案。我個人更喜歡第四個提供的建議(模擬一個實體作爲你的兩個表的基礎)http://stackoverflow.com/questions/7844460/foreign-key-to-multiple-tables – Kik 2014-09-12 23:16:38

回答

0

一個可能的解決方案對於這個問題 - 定義通用的術語「資源」,所以項目使用的資源,而不是員工或供應商

資源具有id, name, type

根據類型,你可以有另外的幾個表有關資源的列(如名字,公司名稱或硬件情況下的服務器機架)

這種方法從可伸縮性的角度來看有多好,但是如果嘗試顯示所有資源,sql查詢可能會有點奇怪RCE中指定有關他們每個人的全面詳細的信息項目,但通常這可以在UI層面來解決

另一種解決方案:

,而不是一個項目進度表,你可以有多重關係:

project_staff 
project_vendors 
project_somethingelse 

這種做法在某種程度上更容易實現,但它是難以維護後