我的蜘蛛感觉刺痛,但我现在已经考虑了2个小时了,我希望得到更多来自hivemind的反馈。
我正在为学校创建一个应用程序。它应该处理学生,教师,课程,荣誉角色,成绩 - 作品。
我想知道如何处理每年后的年份变化。
还有审计问题。我需要一个简单的方法来提取去年或前一年的记录。看看老师在哪一年的哪个年级给了哪门课程。
我遇到的问题是如何处理这个问题。
我的想法是每年创建一个新的干净数据库。所以在今年年底,我会去学校为他们创建一个名为FooSchool2012的新数据库,并以编程方式让最终用户通过连接字符串更改他们想要使用的数据库。
由于我使用的是ORM,因此只需要更改连接字符串,因为数据库是相同的。
但是这对我来说是糟糕的设计和糟糕的工程设计。
通常我的直觉是正确的,所以希望你们能让我知道如何解决这个问题的一些选择。
答案 0 :(得分:4)
不,我不会为每年创建一个新表或数据库。它破坏了第一个正常形式。除名称外,每个表都是重复的。这是一个糟糕的设计。而且维持头痛。谁将创建新数据库,加载架构,然后更改所有URL?如果您在几年后更改架构,是否还需要更改所有后台版本以便人们可以查询历史数据?
不,不是一个好的设计。
将历史信息移到报告/数据仓库数据库中很常见。但是你建议的方案让人联想到旧的,大型机,VSAM平面文件方法。我会按照预期的方式使用关系数据库。
答案 1 :(得分:2)
我确信您的解决方案可以变得可行,但它似乎有点不必要地复杂化。难道你不能通过参考学年在单个数据库中完成同样的事情吗?您可能想要考虑哪些实体有意义才能拥有“生效日期”(即开始和结束时间)。例如,三年级的老师可能会在年中改变,但你可以用有效的日期来处理。
答案 2 :(得分:1)
我的想法是创造一个新的清洁 每年的数据库
如果你想了两个小时,并且最好的想法是每年创建一个新的数据库,那么你就是错误的来设计这个数据库。
这是一个观察,而不是批评。在解决像这样的项目之前,您只需要学习更多基础知识。你会感到沮丧,学校也会受苦。
答案 3 :(得分:0)
您需要在数据库设计上花费大量时间。从长远来看考虑维护,它需要尽可能简单。最好的方法是创建关系数据库,研究桥,验证和基表。为了回答你的问题,我不会每年都做一张桌子。最好的方法是将学生成绩数据映射到表示该学生特定课程ID的特定唯一ID。
我会考虑为每个名词创建一个表格:
讲师 - PK instructorID,instructorName .. (任何其他1:1教练信息)
学生 - PK studentID,学生姓名.. (任何其他1:1学生信息)
课程 - PK CourseID,CourseName,CourseDescription .. (任何其他1:1课程信息)
•教师被分配到不同年级作为他们的班主任老师。
在1:1讲师桌上的你可以有一个名为HomeroomGrade的栏然后你
使用当前成绩更新该列。如果你想保留成绩的历史
你可以让教师表成为一个复合键,另一列递增
目前的记录。
•学生升级(或不升)。
您需要另一张表格,显示学生与独特课程的关系
该年度的成绩,但首先您需要将讲师映射到该特定课程。
PK InstructorToCourseID
InstructorID - FK
CourseID - FK
年 - FK
然后又有一张表将该独特课程映射到该学生的等级..
上一张表中的PK InstructorToCourseID FK
PK StudentID - 来自学生信息表的FK
成绩
很抱歉,如果我一般而且模糊,但这应该会给你一些关于可以创建的关系的想法。