2010-07-21 59 views
1

我必须为我的大学建立一个应用程序,这个应用程序将被视为持续1个月的课程的课程学分。在这个应用程序中,我必须让用户有一种方法来保存教师课后续评估,这是一个人去教室,检查老师并在某些栏目中打勾。这是数据库设计的不好方法吗?

一个例子是:

教学方面:
显示顺序,并遵循类序列:是否观测
给出清楚的例子:YES NO观测
涉及到学生讨论:YES NO观测

如果用户(评估者)选择“是”,那么观察结果中不会写入任何内容,但如果他选择否,他必须写出观察结果。

我怎么能在我的数据库中处理这个?我怀疑过度正常化。 :x在继续这个项目之前,任何建议都会受到欢迎。

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

+0

你有什么技术可用?只是MSQL? – Caladain 2010-07-21 22:37:02

+0

是的,只是Microsoft SQL Server 2008.我打算将ASP.Net MVC2用作用户界面,并将Linq-to-SQL用于我的ORM。 – 2010-07-21 22:37:36

+1

我对于“过度规范化”的担心大部分在SQL中往往很愚蠢。 SQL喜欢以规范化的方式工作(即使没有对分布式键的支持...) - 非规范化数据可以自动生成,从正常化的数据中自动生成,但往往不太容易。如果“数组”中使用了可变数量的列或列,那么很可能存在*不够*规范化。如果需要,从3NF或BCNF开始,然后*向后工作。 – 2010-07-21 22:38:51

回答

1

我会做这样的事情:

表的实际记录 - 注意,这是从学生角度来看问题

| record_id | question_id | YESNO | observation | teacher_id | 

表匿名记录。

| question_id | question_string | 

教师表:

| teacher_id | teacher_string | 

在事物的一般流程,我也将更新学生表要注意“记录了”和插入的答案都在一个事务中。这将保存学生的匿名性,但也获得了数据。

编辑 - 我不知道如何ORM这件事情。如果我正在开发它,我会在10到30个小时内用perl和直接访问sql来破解它。大部分时间将花费在HTML格式上。

+0

我想我错了我的问题。我不想要匿名,所以你的回答对我不起作用。我需要有一种方法将所有这些评估分配给教师。 – 2010-07-21 22:43:06

+0

@sergio:请参阅编辑。 – 2010-07-21 22:57:01

+0

这看起来很不错,并且您可以使用CHECK约束(SQL Server 2008中可用)来强制执行,如果YESNO位为零,则观察值不能为空或空字符串 – Zugwalt 2010-07-21 23:37:10

0

听起来像时间与质量的古老问题。非规范化表格肯定会快速简单,但是具有类别和问题表格的规范化表格将允许灵活性。你可以将它用于其他事情,允许在飞行中设置新的问题类型等,并可以为你提供更好的成绩。

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

顺便说一句,在每个选项的末尾添加一个< br>使其更具可读性。

+1

“业务需求在其生命周期中不会发生变化“ - 另一个古老的确定性:需求将会改变,其寿命将超过预测的”1个月“;) – onedaywhen 2010-07-22 09:12:58

0

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

我怀疑所提出的设计不适合其预期目的,例如,数据分析。尝试编写一些典型的SQL查询(例如,在所有教学问题中观察所有问题的平均观察时长),您会发现它很痛苦:很多CASE陈述,表UNION多次重复,......很可能你会结束编写视图来规范化数据!