2015-04-28 61 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

相关问题