2015-04-28 33 views
0

我不確定這是不是一個蹩腳的愚蠢問題,但是再次,我只需要知道數據庫設計究竟如何工作。可以使用一個外鍵引用兩個不同的表嗎?

所以我有這個數據庫的表稱爲客戶,currentsurveyresults和overallsurveyresults,這表明調查結果客戶填寫

dbo.customers 
---------- 
customerID 
customerName 
surveyID 

dbo.currentsurveyresults 
------------------------ 
surveyID 
questionanswer1 
questionanswer2 

dbo.overallsurveyresults 
------------------------ 
surveyID 
questionanswer1 
questionanswer2.a 
questionanswer2.b 

要得到的,爲什麼我叫/被叫這樣的表一點點:

與電流查詢結果表(這個將在稍後填寫)相比,全部結果表應該顯示更詳細的表格(客戶將在某個日期之後填寫另一個調查,以便稍後詳細說明詳情)。

如果我理解正確的主鍵/外鍵的原則,我可以分配以下?:

customers.customerID (PK) 
customers.surveyID (FK) 
currentsurveyresults.surveyID(PK) 
overallsurveyresults.surveyID(PK) 

所以,我可以總是搶我從兩個結果表需要每當我​​在客戶搜索的信息? (這意味着一個外鍵引用兩個主鍵)

所以問題實際上是:外鍵是否可以引用多個主鍵?如果沒有,我應該添加另一個surveyID列,具體指定每個表?

+6

一外鍵引用主鍵,而不是相反。任何數量的外鍵都可以引用給定的主鍵。 –

+0

謝謝,編輯我的問題。 – Barrosy

+0

「外鍵可以引用多個主鍵嗎??「這是什麼意思一列引用兩列 - 如何 –

回答

1

您與客戶之間的關係是錯誤的(根據您要做的事情)。

你說

客戶將他們的意見的調查,在那一刻 後來他們將與他們認爲,調查類似的問題,更 先進的問題進行調查填寫在那段時間

您希望客戶採取多個調查。

創建一個調查結果表並將所有結果保存在該表中。 因此您知道哪個客戶進行了哪項調查。

CUSTOMERS      SURVEYS    Questions 
---------------    |--------------------|----------------- 
CustomerId (int) PK   | SurveyId (int) PK | QuestionId (int) PK 
Name (nvarchar(500))  | Name (int)   | Quesion (nvarchar(500) 


SURVEY QUESTIONS (Map N-Questions against N-Survey) (Re-use Questions different Surveys) 
---------------- 
SurveyId (FK) 
QuestionId (FK) 


SURVEY RESULTS 
-------------- 
CustomerId (id of Customer who took Survey) 
SurveyId (Id of survey taken) 
SurveyDateTime (Date Survey taken) 
QuestionId (FK to Question table) 
Answer  (Customer Answer) 

如果您不想再使用不同的調查問題的,你可以把它添加到問題表:

Questions 
---------- 
QuestionId 
Question 
SurveyId (FK) 

在這種方法以前的調查將不會被覆蓋。

所以我覺得一個客戶或者取多個不同的調查或 相同(但後者可能會覆蓋)

如果要覆蓋您只需要更新SURVEY RESULTS

+0

謝謝您的回答 我阿爾斯工作。與數據庫結構別人已經創建/設計,所以這是一個有點麻煩,我找出了問題,您的幫助所以真的感謝! – Barrosy

相關問題