Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 我在这个模式设计中是否具有引用完整性?_Sql_Foreign Keys_Relational Database_Relationship - Fatal编程技术网

Sql 我在这个模式设计中是否具有引用完整性?

Sql 我在这个模式设计中是否具有引用完整性?,sql,foreign-keys,relational-database,relationship,Sql,Foreign Keys,Relational Database,Relationship,我担心我有一个涉及版本和版本问题表的数据完整性问题。例如,如果在Versions表中更改了DefMasterID,它将指向不同的主定义,但Questions中的子记录仍将指向MasterQuestionsPool中属于原始调查主记录的记录。理想情况下,约束可以防止这种情况发生,但我认为它们不会 我对这个设计有完整性吗?如果没有,采取什么适当的途径来确保完整性 上述模式基于以下要求: 需要有多个代表显著不同调查的调查主定义 主测量定义需要一个或多个版本,表示微小差异 每个调查大师都有一个问题库,在

我担心我有一个涉及
版本
版本问题
表的数据完整性问题。例如,如果在
Versions
表中更改了
DefMasterID
,它将指向不同的主定义,但
Questions
中的子记录仍将指向
MasterQuestionsPool
中属于原始调查主记录的记录。理想情况下,约束可以防止这种情况发生,但我认为它们不会

我对这个设计有完整性吗?如果没有,采取什么适当的途径来确保完整性

上述模式基于以下要求:

  • 需要有多个代表显著不同调查的调查主定义

  • 主测量定义需要一个或多个版本,表示微小差异

  • 每个调查大师都有一个问题库,在其版本之间共享。单个版本通常不会使用所有问题。这提供了跨调查母版的所有版本比较答案的能力


  • 我认为你的担心是对的

    一种方法是将标识符(称之为MasterQuestionInstanceLabel)添加到MasterQuestionsPool中,该标识符在给定池中是唯一的(但不一定跨池)。换言之,问题1与主题1的配对可能被标记为问题“A”(对于主题1),但主题2可能有不同的问题“A”。然后,在MasterVersionQuestions表中,使用该标签,而不是实际的问题ID

    我认为这更符合现实。其思想是为给定的主控定义一组问题——问题a、B、C、D、E、F(它们是实际ID 1、5、102、15和754的标签),然后说版本1使用a、B和E,而版本2使用a、B、C和F(而不是引用版本表中的实际ID)

    这样,版本表就不会说“此版本中有哪些问题”,而是说“此版本中有哪些我的主池实例”