可能有一个表引用两个不同的表和一个外键吗?

时间:2015-04-28 13:20:12

标签: sql database normalization

我不确定这只是一个愚蠢的愚蠢问题,但话说回来,我只需要知道数据库设计是如何运作的。

所以我有这个数据库,里面有顾客,流量调查结果和工作表调查结果,显示客户填写的调查结果。

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

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

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

为了得到一些我为此命名/调用表的原因:

overallsurveryresults表应该显示一个更详细的表格(客户将在特定日期之后填写另一份调查表,以便稍后可以更详细地说明详细信息)与currentsurveyresults表格相比(这个表格将在之前填写)。 / p>

如果我正确理解主键/外键原理,我可以指定以下内容吗?:

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

因此,每当我搜索客户时,我总能从两个结果表中获取所需的信息? (这意味着一个外键引用两个主键)

所以问题实际上是:外键可以引用多个主键吗?如果没有,我应该添加另一个专门指定每个表的surveyID列吗?

1 个答案:

答案 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