这是一种糟糕的数据库设计方法吗?

时间:2010-07-21 22:33:53

标签: sql database-design

我必须为我的大学建立一个申请,该申请将被视为持续1个月的课程的课程学分。在这个应用程序中,我必须有一种方法让用户保存教师课程后续评估,这是一个人去教室并检查教师并勾选某些列。

一个例子是:

教学方面:
显示顺序并遵循类序列:是否观察
给出明确的例子:是否观察
让学生参与讨论:是否观察

如果用户(评估者)选择“是”,则观察中没有写入任何内容,但如果他选择“否”,则必须写入观察结果。

我怎么能在我的数据库中处理这个?我对过度正常化存有疑虑。 :x在继续项目之前,我们欢迎任何建议。

我现在的计划是只有一个名为Followup的大表,它在Microsoft SQL中具有BIT数据类型的所有这些“方面”,并且每个可以为null的方面都有一个ShowOrderSequenceObservation字段。 O_O我觉得很脏,所以我转向你的开发人员。谢谢!

3 个答案:

答案 0 :(得分:1)

我会做这样的事情:

实际记录表 - 请注意,这是从学生角度出发的匿名记录

| record_id | question_id | YESNO | observation | teacher_id |

问题表。

| question_id | question_string |

教师表:

| teacher_id | teacher_string |

在一般情况下,我还会更新学生表,注意“已录制”并在一次交易中插入答案。这样可以保护学生的匿名性,同时也可以获取数据。

编辑 - 我不知道我怎么会这样做ORM。如果我正在开发它,我会在10-30小时内使用perl和直接sql访问它。大部分时间都花在HTML格式上。

答案 1 :(得分:0)

听起来像时间与质量的古老问题。非规范化表肯定会快速而简单,但带有类别和问题表的规范化表将允许灵活性。你可以将它用于其他事情,允许动态设置新的问题类型等,并且可以让你获得更好的成绩。

如果你认为你可以通过非规范化表获得你想要的东西,我会这样做。它不是一个生产系统,业务需求在其生命周期中不会发生变化。但是如果你想推动蓝带解决方案,我会将其标准化。

BTW,添加< br>在每个选项的末尾使其更具可读性。

答案 2 :(得分:0)

您知道规范化不仅适用于大型企业级数据库(我知道您知道:)。历史证明,如果你没有正常化,你会得到异常。从5NF开始并从那里'优化',但我怀疑你会发现不需要优化。

我怀疑所提出的设计不符合其预期目的,例如数据分析。尝试针对它编写一些典型的SQL查询(例如,在所有问题中跨所有教学问题的观察的平均长度),你会发现它很痛苦:巨大的CASE语句,多次表UNION, ......你可能最终会编写VIEW来规范化数据!

相关问题