繁体   English   中英

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

[英]One table reference to two different tables with one foreign key, possible?

我不确定这是否只是一个la脚的愚蠢问题,但是再说一次,我只需要知道数据库设计的工作原理。

因此,我有这个数据库,其中包含称为客户,当前调查结果和总体调查结果的表,这些表显示客户填写的调查结果。

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列来具体指定每个表?

您与“客户”与“调查”之间的关系是错误的(根据您要执行的操作)。

你说

客户将在那时对他们的意见进行调查,随后他们将在稍后的那个调查中填写类似问题和更高级的问题的调查

您希望客户进行多个调查。

创建一个“调查结果”表并将所有结果保存在该表中。 这样您就知道哪个客户进行了哪个调查。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM