【发布时间】:2015-04-28 22:02:10
【问题描述】:
我不确定这是否只是一个蹩脚的愚蠢问题,但话又说回来,我只需要知道数据库设计究竟是如何工作的。
所以我有这个数据库,其中包含名为客户、当前调查结果和总体调查结果的表格,这些表格显示了客户填写的调查结果。
dbo.customers
----------
customerID
customerName
surveyID
dbo.currentsurveyresults
------------------------
surveyID
questionanswer1
questionanswer2
dbo.overallsurveyresults
------------------------
surveyID
questionanswer1
questionanswer2.a
questionanswer2.b
要了解我为什么这样命名/调用这些表:
与 currentsurveyresults 表(此表将在较早填写)相比,整体调查结果表应显示更详细的表(客户将在特定日期后填写另一份调查,以便稍后可以更具体地详细说明)。
如果我正确理解了主键/外键原理,我可以分配以下内容吗?:
customers.customerID (PK)
customers.surveyID (FK)
currentsurveyresults.surveyID(PK)
overallsurveyresults.surveyID(PK)
这样当我搜索客户时,我总是可以从两个结果表中获取我需要的信息? (这意味着一个外键引用两个主键)
所以问题实际上是:一个外键可以引用多个主键吗?如果没有,我应该添加另一个专门指定每个表的surveyID 列吗?
【问题讨论】:
-
外键引用主键,而不是相反。任意数量的外键都可以引用给定的主键。
-
谢谢,编辑我的问题。
-
"一个外键可以引用多个主键吗?"这意味着什么?一列引用两列 - 如何?
-
您的客户表中有一个 SurveyId,您的客户只能参加一项调查吗?
-
客户将在那个时刻对他们的意见进行调查,然后他们将在稍后的那个时刻填写一份包含类似问题和更高级问题的调查问卷。这些表格/调查是非常相似的表格/调查,但我不能让第二次调查覆盖第一次调查结果。所以我认为客户要么进行多次不同的调查,要么进行相同的调查(但后者可能会覆盖)。至于Politank-Z:是的,我认为这是不可能的,所以答案可能是否定的。 :P
标签: sql database normalization