对象关系数据库主键
Object relational database primary keys
我正在尝试在 oracle 11g 中创建学校招生系统的对象关系数据库,我的 sql 代码如下。我正在尝试编写一个查询,返回课程名称和注册该课程的学生。但是当我尝试添加另一个化学 class,id 为 101 时。我得到一个错误。这是因为我已将 courseID 设为主键,所以我无法使用该课程 ID 插入多个课程?那么谁能告诉我如何创建多个具有相同 ID 但不同学生 ID 的化学插入语句?
CREATE TYPE Student_objtyp AS OBJECT (
FName VARCHAR2(20),
LName VARCHAR2(20),
StudentID NUMBER
);
/
CREATE TABLE Student_objtab OF Student_objtyp (StudentID PRIMARY KEY)
OBJECT IDENTIFIER IS PRIMARY KEY;
CREATE TYPE Course_objtyp AS OBJECT (
CourseName VARCHAR(20),
CourseID NUMBER,
StudentID REF Student_objtyp
);
/
CREATE TABLE Course_objtab OF Course_objtyp (
PRIMARY KEY (CourseID),
FOREIGN KEY (StudentID) REFERENCES Student_objtab)
OBJECT IDENTIFIER IS PRIMARY KEY;
INSERT INTO Student_objtab VALUES('bill','smitts',1);
INSERT INTO Student_objtab VALUES('bob','jo',2);
INSERT INTO Course_objtab
SELECT 'Chemistry',101,
REF(S)
FROM Student_objtab S
WHERE S.StudentID = 1;
INSERT INTO Course_objtab
SELECT 'Chemistry',101,
REF(S)
FROM Student_objtab S
WHERE S.StudentID = 2;
INSERT INTO Course_objtab
SELECT 'Physics',201,
REF(S)
FROM Student_objtab S
WHERE S.StudentID = 1;
select c.CourseName, c.StudentID
from Course_objtab c;
您需要花一些时间思考数据库的结构。根据您的描述,您至少需要三个表。具有 PK course_id 的课程、具有 PK student_id 的学生和具有外键 course_id 和 student_id 的注册,引用各自的表。
由于您的 course_objtab table 包含注册课程的学生,PK 可能应该是 courseID 和 StudentID:
CREATE TABLE Course_objtab OF Course_objtyp (
PRIMARY KEY (CourseID, studentID),
FOREIGN KEY (StudentID) REFERENCES Student_objtab)
OBJECT IDENTIFIER IS PRIMARY KEY;
此设计违反了数据库规范化规则。 COURSE 应该只保存关于课程的信息,而不是关于注册该课程的学生的信息。 IMO 至少应该有一个 ENROLLMENT table,其中包含课程和学生的参考资料。这被称为 "junction table".
我将其建模如下:
STAFF - 有关工作人员的信息(teachers/professors,等等)
学生 - 有关学生的信息
课程 - 有关可能教授的课程的信息
CLASS - 有关课程特定实例的信息,包括 days/times 和 class 会面、位置以及教授该课程的工作人员。
CLASS_ENROLLMENT - 将学生与特定的 CLASS.
联系起来
这里可能还应该有一些关于 ROOM 和 ROOM_SCHEDULE 的东西,也许还有一个 ACADEMIC_CALENDAR。
祝你好运。
我正在尝试在 oracle 11g 中创建学校招生系统的对象关系数据库,我的 sql 代码如下。我正在尝试编写一个查询,返回课程名称和注册该课程的学生。但是当我尝试添加另一个化学 class,id 为 101 时。我得到一个错误。这是因为我已将 courseID 设为主键,所以我无法使用该课程 ID 插入多个课程?那么谁能告诉我如何创建多个具有相同 ID 但不同学生 ID 的化学插入语句?
CREATE TYPE Student_objtyp AS OBJECT (
FName VARCHAR2(20),
LName VARCHAR2(20),
StudentID NUMBER
);
/
CREATE TABLE Student_objtab OF Student_objtyp (StudentID PRIMARY KEY)
OBJECT IDENTIFIER IS PRIMARY KEY;
CREATE TYPE Course_objtyp AS OBJECT (
CourseName VARCHAR(20),
CourseID NUMBER,
StudentID REF Student_objtyp
);
/
CREATE TABLE Course_objtab OF Course_objtyp (
PRIMARY KEY (CourseID),
FOREIGN KEY (StudentID) REFERENCES Student_objtab)
OBJECT IDENTIFIER IS PRIMARY KEY;
INSERT INTO Student_objtab VALUES('bill','smitts',1);
INSERT INTO Student_objtab VALUES('bob','jo',2);
INSERT INTO Course_objtab
SELECT 'Chemistry',101,
REF(S)
FROM Student_objtab S
WHERE S.StudentID = 1;
INSERT INTO Course_objtab
SELECT 'Chemistry',101,
REF(S)
FROM Student_objtab S
WHERE S.StudentID = 2;
INSERT INTO Course_objtab
SELECT 'Physics',201,
REF(S)
FROM Student_objtab S
WHERE S.StudentID = 1;
select c.CourseName, c.StudentID
from Course_objtab c;
您需要花一些时间思考数据库的结构。根据您的描述,您至少需要三个表。具有 PK course_id 的课程、具有 PK student_id 的学生和具有外键 course_id 和 student_id 的注册,引用各自的表。
由于您的 course_objtab table 包含注册课程的学生,PK 可能应该是 courseID 和 StudentID:
CREATE TABLE Course_objtab OF Course_objtyp (
PRIMARY KEY (CourseID, studentID),
FOREIGN KEY (StudentID) REFERENCES Student_objtab)
OBJECT IDENTIFIER IS PRIMARY KEY;
此设计违反了数据库规范化规则。 COURSE 应该只保存关于课程的信息,而不是关于注册该课程的学生的信息。 IMO 至少应该有一个 ENROLLMENT table,其中包含课程和学生的参考资料。这被称为 "junction table".
我将其建模如下:
STAFF - 有关工作人员的信息(teachers/professors,等等) 学生 - 有关学生的信息 课程 - 有关可能教授的课程的信息 CLASS - 有关课程特定实例的信息,包括 days/times 和 class 会面、位置以及教授该课程的工作人员。 CLASS_ENROLLMENT - 将学生与特定的 CLASS.
联系起来这里可能还应该有一些关于 ROOM 和 ROOM_SCHEDULE 的东西,也许还有一个 ACADEMIC_CALENDAR。
祝你好运。