Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.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_Mysql_Database_Database Design_Foreign Keys - Fatal编程技术网

Sql 如何构造数据库,使两个表构成相同的;“元素”;链接到另一个?

Sql 如何构造数据库,使两个表构成相同的;“元素”;链接到另一个?,sql,mysql,database,database-design,foreign-keys,Sql,Mysql,Database,Database Design,Foreign Keys,我阅读了有关数据库结构和规范化的内容,并决定在学习内容的基础上重新构建数据库,以减少冗余 我有不同类型的条目可以学习空白文本/完形填空测试(一个文本,多个空白)和简单的已知未知(一个问题,一个答案)类型 现在我有点为难了: 间隙在用户表中需要与问题答案类型完全相同的列 但是他们需要的列比问答类型少(所有信息都在clozetests表中) 我希望有一个“神奇”的外键,可以同时指向gap和terms表。当然,他们的身份会重叠。我不喜欢在user_术语中同时使用term_id和gap_id,这似乎是

我阅读了有关数据库结构和规范化的内容,并决定在学习内容的基础上重新构建数据库,以减少冗余

我有不同类型的条目可以学习空白文本/完形填空测试(一个文本,多个空白)和简单的已知未知(一个问题,一个答案)类型

现在我有点为难了:

  • 间隙在用户表中需要与问题答案类型完全相同的列
  • 但是他们需要的列比问答类型少(所有信息都在
    clozetests
    表中)
  • 我希望有一个“神奇”的外键,可以同时指向gap和terms表。当然,他们的身份会重叠。我不喜欢在user_术语中同时使用term_id和gap_id,这似乎是不合法的(但在谷歌搜索了一段时间后,不知道这个泡菜叫什么名字,这是我能想到的最优雅的)
  • 我不想让
    user\u gaps
    类似于
    user\u terms
    ,因为这样一来,当涉及到表
    user\u terms\u answers
    时,我就陷入了同样的困境
我贴了这张纸板剪贴画。我没有删除与这个问题无关的内容,但是如果任何人的困惑可以像那样得到纠正,我可以这样做。我觉得它看起来已经非常整洁了。至少比我想象的要整洁。
我是不是说过我们会非常感谢你的帮助?回答者可能会因为自己的智慧而被奉承。


背景故事如果你在意的话,它与问题并不相关。
在重新设计之前,我把它们都放在一张表中(因为我匆忙地添加了间隙文本),因此间隙文本是没有答案的“正常”项目,而间隙是没有问题的项目。应用程序将它们链接在一起


编辑
在写了一些有用的帖子之后,我加了一个答案。我还不是100%满意。我试着为这个设置的常见查询编写视图,我觉得我必须为数据库领域的某些东西提取应用程序逻辑。

编辑我的问题后,一些Stackoverflow开始向我关联正确的问题

我知道这是一个常见的问题,但我真的找不到它,只是找不到正确的搜索词,我猜

下面的线程解决了类似的问题,我将尝试将这种逻辑应用到我自己的设计中。他们都建议为类似的项目添加更高级别的描述(在我的例子中是术语和间隙)。这是有道理的,并反映了我的应用程序背后的逻辑

  • 并说明了在数据跨表分解后如何检索数据。他还向我提供了关键字类表继承的线索,所以现在我知道了用谷歌搜索什么了
一旦我应用了这个,我将用我编辑的模式发回。这样看起来更优雅

编辑模式

如评论中所述,如果不了解整个故事,很难回答。所以,这里有一个故事和一个模型来匹配。看看你是否能把这个改编成你的例子

(外国)语言学校语言熟练程度的多个级别提供考试。学校为每种语言的每一个级别进行了许多预先制作的测试(
LangLevelTestNo

每个测试包含几个(多个)问题。每个问题可以是简单的封闭文本类型的为每个简单问题存储正确答案。为每个结束文本问题的间隔存储正确的术语

学生可以参加语言水平考试,并获得一个预先制作的测试。对于每个学生考试,将维护考试表,该表存储学生对考试的每个问题的答案。与问题一样,答案可能是简单的文本类型


这里的主要问题是讲故事。谁,什么,何时何地,为什么?这是可以学习的,但这是一种考验——也许吧。谁在参加考试?一篇密文就是整个测试吗?考试有很多问题吗?一个术语可以在许多间隙中重复吗?有分数吗?这个测试可以进行几次吗?语言?这是什么样的测试?@Damir Sudarevic这是“简单的”重复学习。间隙和术语是相同的“单位”。间隙有一个更高阶的单位,间隙文本,其中包括间隙(因此,在某种程度上,差距文本构成了许多差距的问题部分,而对于一个学期来说,一个问题对应一个答案。这不是一个评估人的测试。我想我会在完成后将我的模式放在CodeReview上,然后我会更好地解释它。谢谢,但我不再真正认识到我在这种设置中的模式。这可能是und中最大的问题。)perstanding是完形填空测试的一个术语。这应该是gap文本的同义词,它就像:Corvus cornix是
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu对于多个答案字段。实际上,数据库中的文本不会包含
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
,而是包含[Corvidae]。应用程序会屏蔽它在CodeReview上,当它更完整时,我会确保