2012-10-21 49 views
5

我正在学习从here插入异常。以下的数据被写入它,插入异常

插入异常

当某些属性不能插入到数据库中没有其它属性的存在的插入物异常发生。例如,这是删除异常的反面 - 除非我们至少有一名学生参加了课程,否则我们不能添加新课程。

StudentNum CourseNum Student Name Address  Course 
S21   9201  Jones   Edinburgh Accounts 
S21   9267  Jones   Edinburgh Accounts 
S24   9267  Smith   Glasgow  physics 
S30   9201  Richards  Manchester Computing 
S30   9322  Richards  Manchester Maths 

我被卡住了解这个概念。为什么我们需要一个学生参加课程才能存在?

在此先感谢

回答

7

这意味着该模式不被标准化,即现在您对表Student课程的信息。

因此,为了插入课程细节,您还需要提供学生的详细信息。

有你需要阅读有关different forms of normalization,但在这个例子中,正确的道路来解决这一异常现象最有可能将创建三个表,即strong entity typesStudentCourseassociative entity type linking tableStudentCourse(可能称为RegistrationGrade ),这将允许您存储学生和课程数据,无需重复和异常,并为许多学生分配许多课程。

您可以在下面的链接,通过规范化的例子看,它会给你一个更好的主意:

http://www.sqa.org.uk/e-learning/MDBS01CD/page_26.htm#Example

3

的例子假定studentnum和coursenum形成复合主键实现完整的规则:一学生不能多次参加同一课程,即组合不合时宜。因此,尝试添加课程记录也需要studentnum。为了避免这种情况,同时仍然保持完整性规则,组合键在关联实体和课程中实现,学生在单独的实体中。