一个 table 引用两个不同的 table 一个外键,可能吗?
One table reference to two different tables with one foreign key, possible?
我不确定这是否只是一个蹩脚的愚蠢问题,但话又说回来,我只需要知道数据库设计究竟是如何工作的。
所以我有这个数据库,其中包含 table 个名为 customers、currentsurveyresults 和 overallsurveyresults 的数据库,它们显示客户填写的调查结果。
dbo.customers
----------
customerID
customerName
surveyID
dbo.currentsurveyresults
------------------------
surveyID
questionanswer1
questionanswer2
dbo.overallsurveyresults
------------------------
surveyID
questionanswer1
questionanswer2.a
questionanswer2.b
想知道为什么我 named/called table 是这样的:
总体调查结果 table 与当前调查结果 [=29] 相比,应该显示更详细的 table(客户将在特定日期后填写另一份调查,以便稍后可以提供更具体的详细信息) =](这个会在前面填写)
如果我正确理解主要key/foreign关键原则,我可以分配以下内容吗?:
customers.customerID (PK)
customers.surveyID (FK)
currentsurveyresults.surveyID(PK)
overallsurveyresults.surveyID(PK)
以便我在搜索客户时始终可以从两个结果 table 中获取我需要的信息? (这意味着一个外键引用两个主键)
所以问题实际上是:一个外键可以引用多个主键吗?如果不是,我应该添加另一个 surveyID 列来具体指定每个 table 吗?
您的客户和调查之间的关系是错误的(根据您的尝试)。
你说的
The customer will make a survey of their opinion at that moment and
later on they will fill in a survey with similar questions and more
advanced question on that survey of their opinion at that later moment
您希望客户参加不止一项调查。
创建调查结果 table 并将所有结果保存在其中 Table。
这样您就知道哪个客户参加了哪个调查。
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)
如果您不想在不同的调查中重复使用该问题,您可以将其添加到问题中 Table:
Questions
----------
QuestionId
Question
SurveyId (FK)
在此方法中,之前的调查不会被覆盖。
So I think a customer takes either multiple different surveys or the
same (however the latter might overwrite)
如果你想覆盖你只需要更新 SURVEY RESULTS
Table
我不确定这是否只是一个蹩脚的愚蠢问题,但话又说回来,我只需要知道数据库设计究竟是如何工作的。
所以我有这个数据库,其中包含 table 个名为 customers、currentsurveyresults 和 overallsurveyresults 的数据库,它们显示客户填写的调查结果。
dbo.customers
----------
customerID
customerName
surveyID
dbo.currentsurveyresults
------------------------
surveyID
questionanswer1
questionanswer2
dbo.overallsurveyresults
------------------------
surveyID
questionanswer1
questionanswer2.a
questionanswer2.b
想知道为什么我 named/called table 是这样的:
总体调查结果 table 与当前调查结果 [=29] 相比,应该显示更详细的 table(客户将在特定日期后填写另一份调查,以便稍后可以提供更具体的详细信息) =](这个会在前面填写)
如果我正确理解主要key/foreign关键原则,我可以分配以下内容吗?:
customers.customerID (PK)
customers.surveyID (FK)
currentsurveyresults.surveyID(PK)
overallsurveyresults.surveyID(PK)
以便我在搜索客户时始终可以从两个结果 table 中获取我需要的信息? (这意味着一个外键引用两个主键)
所以问题实际上是:一个外键可以引用多个主键吗?如果不是,我应该添加另一个 surveyID 列来具体指定每个 table 吗?
您的客户和调查之间的关系是错误的(根据您的尝试)。
你说的
The customer will make a survey of their opinion at that moment and later on they will fill in a survey with similar questions and more advanced question on that survey of their opinion at that later moment
您希望客户参加不止一项调查。
创建调查结果 table 并将所有结果保存在其中 Table。 这样您就知道哪个客户参加了哪个调查。
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)
如果您不想在不同的调查中重复使用该问题,您可以将其添加到问题中 Table:
Questions
----------
QuestionId
Question
SurveyId (FK)
在此方法中,之前的调查不会被覆盖。
So I think a customer takes either multiple different surveys or the same (however the latter might overwrite)
如果你想覆盖你只需要更新 SURVEY RESULTS
Table