Oracle笔记(十六)数据库设计范式(二)
);
CREATE TABLE course (
cid NUMBER PRIMARY KEY,
cname VARCHAR2(50) NOT NULL,
credit NUMBER NOT NULL
);
CREATE TABLE studentcourse (
stuid NUMBER REFERENCES student(stuid),
cid NUMBER REFERENCES course(cid),
score NUMBER
); www.2cto.com
INSERT INTO student (stuid,stuname) VALUES (1,'张三');
INSERT INTO student (stuid,stuname) VALUES (2,'李四');
INSERT INTO student (stuid,stuname) VALUES (3,'王五');
INSERT INTO course (cid,cname,credit) VALUES (10,'Java',3);
INSERT INTO course (cid,cname,credit) VALUES (11,'Oracle',1);
INSERT INTO course (cid,cname,credit) VALUES (12,'
Linux',2);
INSERT INTO studentcourse (stuid,cid,score) VALUES (1,10,89);
INSERT INTO studentcourse (stuid,cid,score) VALUES (2,10,99);
INSERT INTO studentcourse (stuid,cid,score) VALUES (1,11,79);
INSERT INTO studentcourse (stuid,cid,score) VALUES (2,11,89);
这种设计与之前讲解运动会-项目-成绩的设计是一样的。
三、第三范式:一对多 www.2cto.com
例如,现在一个学校有多个学生,如果用第一范式无法实现,而如果用第二范式则表示多对多的关系,即:一个学校有多个学生,一个学生在多个学校,不符合于要求,所以此时可以使用第三范式,参考之前的部门和雇员操作实现,一个部门有多个雇员,所以按照设计编写如下:
CREATE TABLE school (
sid NUMBER PRIMARY KEY,
sname VARCHAR2(20) NOT NULL
);
CREATE TABLE student (
stuid NUMBER PRIMARY KEY,
stuname VARCHAR2(20) NOT NULL,
sid NUMBER REFERENCES school(sid)
);
而在实际的工作之中,第三范式的使用是最多的。
以上的三个范式只是作为参考使用。