13

我正在从这里学习插入异常。以下数据写入其中,

插入异常

当某些属性在没有其他属性的情况下无法插入到数据库中时,就会发生插入异常。例如,这与删除异常相反——除非我们至少有一名学生注册了该课程,否则我们无法添加新课程。

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

我被困在理解这个概念上。为什么我们需要学生注册该课程才能存在?

提前致谢

4

3 回答 3

14

这意味着模式未标准化,即现在您在 table 中拥有有关课程的信息Student

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

您需要阅读不同形式的规范化,但在此示例中,解决此异常的正确方法很可能是创建三个表,即强实体类型 Student、、Course关联实体类型链接表 StudentCourse(可能称为 aRegistration或 a Grade) 这将允许您存储没有重复和异常的学生和课程数据,以及将许多课程分配给许多学生。

您可以阅读以下链接中的规范化示例,它会给您一个更好的主意:

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

于 2012-10-21T14:38:36.010 回答
8

该示例假设studentnum 和coursenum 构成一个复合主键,实现一个学生不能多次注册同一课程的完整性规则,即该组合是唯一的。因此,尝试添加课程记录也需要学生人数。为了避免这种情况,同时仍然保持完整性规则,复合键在关联实体中实现,课程和学生在不同的实体中。

于 2013-08-18T23:48:00.280 回答
1

插入异常:根据上面的示例,只有一个表具有所有属性。现在我想介绍新课程,那么我必须知道student id(想要学习该课程的学生)这是一个主键,不能为空。根据所取的表你一定知道primary key(student id)。如果您想输入其他字段,但现在我们只有新的课程详细信息,没有学生注册。因此,您不能只输入新课程而将主键留空。这是插入异常。

于 2020-02-05T07:40:37.393 回答