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

Sql 这是一种糟糕的数据库设计方法吗?,sql,database-design,Sql,Database Design,我必须为我的大学建立一个申请,该申请将作为持续1个月的课程学分。在这个应用程序中,我必须为用户提供一种保存教师课堂后续评估的方法,即一个人去教室检查教师并勾选某些列 例如: 教学方面: 显示顺序并遵循课堂顺序:是-否观察结果 给出了清晰的示例:是-否观察值 让学生参与讨论:是否观察 如果用户(评估者)选择“是”,则观察结果中不会写入任何内容,但如果用户选择“否”,则必须无误地写入观察结果 如何在数据库中处理此问题?我对过度正常化表示怀疑在我继续这个项目之前,欢迎提出任何建议 到目前为止,我的计划

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

例如:

教学方面:
显示顺序并遵循课堂顺序:是-否观察结果
给出了清晰的示例:是-否观察值
让学生参与讨论:是否观察

如果用户(评估者)选择“是”,则观察结果中不会写入任何内容,但如果用户选择“否”,则必须无误地写入观察结果

如何在数据库中处理此问题?我对过度正常化表示怀疑在我继续这个项目之前,欢迎提出任何建议


到目前为止,我的计划是创建一个名为Followup的大表,其中包含所有这些“方面”,在Microsoft SQL中有一个位数据类型,并为每个可以为null的方面提供一个showOrderSequenceObservision字段。O_O我一想到这些就觉得脏,所以我就求助于各位开发人员。谢谢大家!

我会这样做:

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

| record_id | question_id | YESNO | observation | teacher_id |
问题表

| question_id | question_string |
教师表:

| teacher_id | teacher_string |
在一般流程中,我还将更新student表以记录“has recorded”,并在一个事务中插入所有答案。这样既可以保持学生的匿名性,又可以获取数据


编辑-我不知道我将如何处理这件事。如果我在开发它,我会用perl和直接sql访问在10-30小时内完成。大部分时间都花在HTML格式上。

我会这样做:

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

| record_id | question_id | YESNO | observation | teacher_id |
问题表

| question_id | question_string |
教师表:

| teacher_id | teacher_string |
在一般流程中,我还将更新student表以记录“has recorded”,并在一个事务中插入所有答案。这样既可以保持学生的匿名性,又可以获取数据


编辑-我不知道我将如何处理这件事。如果我在开发它,我会用perl和直接sql访问在10-30小时内完成。大部分时间都花在HTML格式上。

听起来像是时间与质量的古老问题。一个非规范化的表格肯定是快速而简单的,但一个带有类别和问题表格的规范化表格将允许灵活性。你可以用它做其他事情,允许新的问题类型在飞行中设置等等,并且可以给你一个更好的分数


如果你认为你可以通过一个非规范化的表得到你想要的,我会这么做。它不是一个生产系统,业务需求在其生命周期内不会改变。但如果你想推动蓝丝带解决方案,我会让它正常化


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

听起来像是时间与质量的古老问题。一个非规范化的表格肯定是快速而简单的,但一个带有类别和问题表格的规范化表格将允许灵活性。你可以用它做其他事情,允许新的问题类型在飞行中设置等等,并且可以给你一个更好的分数


如果你认为你可以通过一个非规范化的表得到你想要的,我会这么做。它不是一个生产系统,业务需求在其生命周期内不会改变。但如果你想推动蓝丝带解决方案,我会让它正常化


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

您知道规范化不仅仅适用于大型企业级数据库(我知道您知道:)。历史已经表明,如果你不正常化,你会得到异常。从5NF开始,从那里开始“优化”,尽管我怀疑你会发现优化不是必需的


我怀疑支撑设计不适合其预期用途,例如数据分析。尝试针对它编写一些典型的SQL查询(例如,所有教学问题的平均观察长度,然后是所有问题的平均观察长度),您会发现这是一个难题:大量的
CASE
语句、表
UNION
ed多次。。。很可能您最终会编写视图来规范化数据

您知道规范化不仅仅适用于大型企业级数据库(我知道您知道:)。历史已经表明,如果你不正常化,你会得到异常。从5NF开始,从那里开始“优化”,尽管我怀疑你会发现优化不是必需的


我怀疑支撑设计不适合其预期用途,例如数据分析。尝试针对它编写一些典型的SQL查询(例如,所有教学问题的平均观察长度,然后是所有问题的平均观察长度),您会发现这是一个难题:大量的
CASE
语句、表
UNION
ed多次。。。很可能您最终会编写视图来规范化数据

你们有什么可用的技术?只有MSQL?是的,只有Microsoft SQL Server 2008。我计划使用ASP.NETMVC2作为我的ORM的UI和LINQtoSQL。我对“过度规范化”的担忧在SQL中往往是愚蠢的。SQL喜欢以规范化的方式工作(即使不支持分布式键…)——非规范化的数据可以从正确规范化的数据自动生成,但通常不是那么容易。如果“数组”使用的列数或列数可变,则很可能没有足够的规范化。从3NF或BCNF开始,然后在需要时向后工作。您有哪些可用的技术?只有MSQL?是的,只有Microsoft SQL Server 2008。我计划使用ASP.NETMVC2作为我的ORM的UI和LINQtoSQL