如何构建我的数据库,以便构成相同“元素”的两个表链接到另一个?

时间:2011-01-30 23:54:57

标签: sql mysql database database-design foreign-keys

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

我可以学习不同类型的条目。 差距文本 /完整填充测试(一个文字,多个差距)和简单的已知 - 未知(一个问题,一个答案)类型。

现在我有点发脾气了:

  • 缺口需要与用户表格中
  • 完全相同的列
  • 但是他们需要的列少于问答类型(所有信息都在clozetests表中)
  • 我希望有一个“ magic ”外键,可以指出差距和条款表。当然,他们的ID会重叠。我不喜欢在user_terms中同时使用term_id和gap_id,这看起来很不优雅(但是谷歌搜索了一段时间之后我能想出的最优雅,不知道这个 pickle 的名字是什么)。
  • 我不希望user_gaps类似于user_terms,因为当谈到表格user_terms_answers时,我会处于相同的腌制中。

我提出了我的架构的纸板剪裁拼贴。我没有删除与这个问题无关的东西,但如果任何人的困惑可以像这样纠正,我就能做到。我觉得它看起来已经超级整洁了。至少比我的心理概念还要整洁 我是否说过任何帮助都会受到高度赞赏?答案者可能会发现自己被他们的智慧所吸引。 Cutout of my schema diagram


背景故事如果你关心,这与问题无关 在重塑之前,我把它们都放在一张桌子上(因为我匆忙地添加了差距文本),因此差距文本是没有答案的“正常”项目,而没有问题的项目之间存在差距。应用程序将它们链接在一起


修改

在咳出一些有用的帖子之后我添加了一个答案。我还不是100%满意。我尝试为这个设置编写常见查询的视图,我觉得我必须为数据库草皮拉出应用程序逻辑。

2 个答案:

答案 0 :(得分:2)

正如评论中所提到的,如果不了解整个故事,很难回答。所以,这是一个故事和模型匹配。看看你能否适应这个例子。

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

每个测试包含多个(很多)问题。每个问题可以是简单,也可以是 close-text-type 。为每个简单问题存储正确答案。为每个关闭文字问题的每个差距存储正确的字词

学生可以考试获得语言水平,并获得一项预先制作的考试。对于每个学生考试,会保留考试表,为的每个问题存储学生答案考试即可。与问题一样,答案可能是简短文字类型简单

enter image description here

答案 1 :(得分:1)

在编辑我的问题之后,一些Stackoverflow开始将正确的问题与我联系起来。

我知道这是一个常见的问题,但我真的无法找到它,我想是无法提出正确的搜索字词。

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

一旦我应用了这个,我将使用我编辑的架构回发。它确实看起来更优雅。

已编辑的架构

enter image description here