oracle建立课程表,Oracle从零开始20——数据库设计

如果要更改课程信息,则要更改许多条记录

使用第二范式修改数据库脚本:

学生应该是一个实体表的信息

CREATE TABLE student

(

stuno        VARCHAR2(50)    PRIMARY KEY,

stuname        VARCHAR2(50),

stuage        NUMBER(2)

);

课程也应该是一个实体表

CREATE TABLE course

(

cid        NUMBER(2)    PRIMARY KEY,

cname        VARCHAR2(20),

credit        NUMBER(2)

);

学生选课:一个学生可能选多个课程,一门课也会有多个学生参加,课程也应是一个实体表

CREATE TABLE selectcourse

(

stuno        VARCHAR2(50),

cid        NUMBER(2),

grade        NUMBER(2),

加入外键关联,因为学生或者课程,缺一个,成绩都没有了

);

INSERT INTO student VALUES('s001','张三',20);

INSERT INTO student VALUES('s001','李四',20);

INSERT INTO student VALUES('s001','王五',20);

INSERT INTO course VALUES('ca','JAVA',3);

INSERT INTO course VALUES('cb','ORACLE',5);

INSERT INTO selectcourse VALUES('s001','ca',89.0);

INSERT INTO selectcourse VALUES('s002','ca',79.0);

INSERT INTO selectcourse VALUES('s003','ca',77.0);

以上设计解决了以下问题:

学生不选课,课程信息不会消失

更新课程的时候直接更新课程表即可

所有的关联关系在关系表中提现

也就是现在完成了多-多的关系。

3)第三范式

在实际开发中使用的频率最多。

定义:在第二范式的基础上,数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖,则符合第三范式。因此,满足第三范式的数据库表应该不存在如下的依赖关系:

关键字段——》非关键字段a——》非关键字段b

例如现在要求设计一个学生表,包含学号、姓名、年龄、所在院校、学院地址、学院电话,此时肯定不能第一范式,但是如果使用第二范式呢?

CREATE TABLE student

(

stuno        VARCHAR2(50)    PRIMARY KEY,

stuname        VARCHAR2(50),

stuage        NUMBER(2)

);

CREATE TABLE collage

(

cid            VARCHAR2(50)    PRIMARY KEY,

cname        VARCHAR2(50),

caddress        VARCHAR2(50),

ctel            VARCHAR2(50)

);

CREATE TABLE studentcollage

(

stuno        VARCHAR2(50),

cid            VARCHAR2(50),

设置主外键关系

);

按照这种设计,一个学生可以在多个学院同时上课。此时最好的做法,一个学院包含多个学生,一个学生属于一个学院。实际上,此设计就类似于部门和雇员表的设计结构。

CREATE TABLE collage

(

cid            VARCHAR2(50)    PRIMARY KEY,

cname        VARCHAR2(50),

caddress        VARCHAR2(50),

ctel            VARCHAR2(50)

);

CREATE TABLE student

(

stuno        VARCHAR2(50)    PRIMARY KEY,

stuname        VARCHAR2(50),

stuage        NUMBER(2),

cid            VARCHAR2(50),

建立主外键关联

);

这就是一个很明确的一对多关系设计。

以上三个范式只能参考,如果真的按照这样方式设计,则很累。数据库唯一原则:

数据库表的关连查询越少越好,SQL复杂度越低越好。

2.数据库设计工具(重点)

常用的是Sybase的PowerDesigner开发工具

点击新建——》物理数据模型Physical Data Model——》选择类型ORACLE VERSION 10g

2610680409008505855.jpg

下面使用PowerDesigner工具将Oracle中的dept和emp表进行还原

2610680409008505877.jpg

Name是表在工具中的显示,而Code是该表在数据库中真正的名字。然后定义列

1350798413251606239.jpg

3096224743834387333.jpg

这两张表存在关系,所以为了维护主外键关系,可以直接在工具中进行拖拽操作。

2843741689724929725.jpg

双击打开

2585910611057969299.jpg

该键名称太长,改短一些:

2585910611057969315.jpg

得到关系之后就可以通过工具进行数据库脚本的创建。

3100728343461758440.jpg

在桌面生成数据库脚本:

1114359432814659245.jpg

可以看到桌面的脚本:

1280711144050651907.jpg

下面生成数据库的测试数据:

43628621407319499.jpg

放在桌面:

653866370916023734.jpg

2523986116181622188.jpg

3.数据库设计实例(重点)

1)要求

设计一个网上购物程序(使用powerdesigner建立模型并编写测试数据)。有一下需求:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值