我不确定这只是一个愚蠢的愚蠢问题,但话说回来,我只需要知道数据库设计是如何运作的。
所以我有这个数据库,里面有顾客,流量调查结果和工作表调查结果,显示客户填写的调查结果。
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列吗?
答案 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
表