gpt4 book ai didi

mysql - 从多个候选键中选择

转载 作者:行者123 更新时间:2023-11-29 02:04:20 25 4
gpt4 key购买 nike

我可能缺乏数学背景,无法为自己找到正确的答案。我有这样设置的表(省略了不相关的列):

Questions
queID

Answers
queID
ansID

用户可以通过选择特定问题来创建测验。答案是用户可以从每个问题中选择的可能答案。

Sessions
sessID

当客户选择一组问题进行回答时,将创建一个“ session ”。

SessionQuestions
sqID
sessID
queID

这些是用户为给定 session 选择的问题。

我遇到障碍的地方是 SessionAnswers 级别。问题的答案顺序可以是随机的。也就是说,默认答案顺序为A、B、C的多项选择题可以显示为C、B、A给用户。但是,每当他们再次查看该问题时,它仍然需要是 C、B、A,因此需要存储最终顺序。我的暂定表格是这样的:

SessionAnswers
sqID
ansID
saOrder

问题是 sqID 指向 queID,但 ansID 也是。这意味着我可以在此表上使用 sessIDsqID。我不确定该选哪一个。此设置仍然可以将 ansID 映射到一个答案,该答案映射到一个甚至不在 SessionQuestions 上的问题,这是不正确的。我可以改进设置以避免这种情况吗?

最佳答案

菱形依赖受益于自然键(与代理项相反)。自然键可以在“菱形”底部“合并”,产生正确的引用完整性行为。

在您的情况下,使用 SessionQuestions 中的自然键({sessID, queID} 而不是代理 {sqID}),启用沿菱形的两个“边缘”传播所有父键“组件”,使得不可能有其问题不在同一 session 中的 session 答案。

您的模型应如下所示:

enter image description here

注意:由于每个 session 的答案也可以按顺序识别,因此您需要在 SessionAnswers 中添加一个备用键(由上面的“U1”表示)。请注意,queIDansID 都不应包含在该键中 - 否则将允许两个不同的答案占用相同的“插槽”。

--- 编辑 ---

@tandu,我看到你接受了我的回答,所以我可能应该在我领先的时候停下来 ;) 但我仍然想提出一个替代设计:

enter image description here

这应该能让您保持历史和秩序。当用户输入一组答案时,它们将被记录在版本为 1 的 SessionAnswers 中。如果更改了一个或多个答案,则会创建 version=2 等等...

每个 session 版本都有 2 个与之关联的集合:

  • 一组独特的问题,每个问题都有一个答案(通过 PK 强制执行)。
  • 一组用于排序的“插槽”(通过备用键强制执行)。

并且由于两者都包含在同一个表中,这意味着每个问题恰好映射到一个槽位,每个槽位恰好映射到一个问题。

顺便说一句,这还使您能够根据需要更改版本之间的顺序。

关于mysql - 从多个候选键中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9082575/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com