这是好的/坏的数据库设计,为什么?

1 database-design

我正在为一个小项目建立一个数据库。我没有太多经验,所以我不确定,但我觉得我没有正确地接近这个。

我有一个系统,允许用户创建课程,其中包含他们回答的问题部分。我已将课程、部分和问题作为单独的实体分开,但问题表需要来自以下内容的外键:

  • Users 表知道谁创建了它。
  • 课程表以了解它属于哪个课程。
  • Sections 表以了解它位于课程的哪个部分。

在此处输入图片说明

问题:对于需要来自任何地方的外键的问题表,这种布局是否可以接受?有什么可以改进的吗?

谢谢你的帮助。

小智 6

坏的。以下是一些随机笔记,这些笔记来自处理此类系统的经验。随心所欲:

  • 一个大问题是 xyz_N 列(即answer_2a5_comment)。当你看到这个时,想想不正确的归一化数据。如果有 6 个问题会发生什么?100题?(哦,是的,我开发了这种软件,你不会相信人们会回答多少问题!)

  • 另一个糟糕的设计是试图“共享”一张表:问题也可以作为“答案”?不; 再次,非规范化数据!多人如何回答而不重复数据?这是不可能的,因为每个“答案”都是一个问题!从行动/查询的角度思考并询问它们是否可以实现。

  • 记住上述内容,调查/考试(“包含问题”)和回复(“包含答案”)之间存在非常重要的缺失关系。这些关系对于规范化(无 xyz_N 列)以及能够提出诸如“我现在应该展示哪些问题?”之类的问题非常重要。

  • 没有与课程相关的“用户”。有教师(教师)和学生。学生不能“拥有”课程。这很容易和干净地分离,并允许更好的 DRI。此外,需要为不同的“用户”类型捕获不同的信息 - 相信我。此外,有时老师也是学生!

  • 从“回答”/问题到课程的冗余关系;这种关系存在问题到部分到课程,不需要重复。