我正在创建一个简单的考试系统,在这个系统中,你将基本上能够存储学生、班级、考试、问题和分数(以及其他一些所依赖的东西)。我还使用实体框架代码-优先。
我对Student和Instructor类使用继承,这两个类是从Person类派生的。在SQL中,它由包含判别器列的单个People表以及表示两个类的每个字段的列表示。
下面是我的数据库图的图片:

这是我第一次设计这么复杂的数据库,我真的不确定我是否做好了一切(特别是担心循环引用)。如果你能快速看一看,告诉我你是否发现了什么问题,我会非常感激的。
非常感谢你的回答,mgw854。
不一致的命名是由于实体框架。我首先使用代码,因此它会根据自己的意愿命名它自动生成的列(外键)。如果你能告诉我怎么修理它,我会的。
关于学生与班级的关系,EF产生这种关系的原因有点奇怪。这可能是因为我忘了在班里包括一个学生集合:D
是的,现在我考虑了一下,如果我在每个问题中增加一个值列,这表明它给你多少分,然后用它来计算运行时的分数,肯定会更好。
谢谢你的帮助。我会尽快修好的。
PS:如果你不介意的话,我不打算把问题记下来,因为我想看看更多的建议:)
所以,我已经做了修改,并更新了图表图像。寻找一种使EF无需下划线生成列名的方法,而无需手动编写每个名称。
刚刚找到了如何以一种很好的方式修复命名约定(EF自定义命名约定)。
图再次更新。
发布于 2014-12-14 00:04:05
乍一看,我看到许多不一致的命名--Person_ID,但是PasswordHash (或者更糟的是SchoolYear_ID)。选择一个命名约定,并坚持下去。我向你保证,你未来的自我与感谢!
在Classes表中,有一个Student_ID列。就学校而言,许多学生上一节课,所以课堂应该与学生保持1:n的关系,而不是1:1的关系。我会创建一个Class_Registration表,其中包含一个类id和一个学生id。
另外,除非你的分数可能与你的表现不同(比如说,教授给你提了点力),否则你就不应该有一个StudentScores表。这应该是从你正确回答的问题数中得出的。
我没有看到任何令人担忧的循环引用,所以我认为你在这方面做得很好。
https://dba.stackexchange.com/questions/86112
复制相似问题