oralce数据库建模

/**
软件开发过程:
1. 需求调研,与客户进行沟通
2. 需求分析,将现实工作中的动作模拟到计算机
数据建模
3. 开发
4. 测试
5. 上线部署

从关系数据库的表中删除冗余信息的过程称为规范化,
是得到高效的关系型数据库表的逻辑结构最好和最容易的方法。

获得数据规范化的方法: 三范式

步骤1:
第一范式:必须要有主键,并且每个属性值,都是不可再分的最小数据单位,
则称R是第一范式的关系。
第二范式:所有非主关键字都完全依赖于主关键字(通常用于联合主键)
第三范式:非主关键字不能依赖于其他非主关键字(通常用于一个主键)
*/

– 有 N 个班级,有 N 个学生,有 N 门课程
– 一个班可以有多个学生,一个学生只能属于一个班,
– 一个学生可以选修多门课程,一门课程可以被多个学生选修

– 班级表

CREATE TABLE tb_clazzz(
ID INT PRIMARY KEY, – id
CODE VARCHAR2(10) – 班级名
);

INSERT INTO tb_clazzz(ID,CODE)VALUES(1,’Java9’);
INSERT INTO tb_clazzz(ID,CODE)VALUES(2,’Java10’);

– 学生表
CREATE TABLE tb_stuu(
ID INT PRIMARY KEY,
NAME VARCHAR2(18) NOT NULL,
sex CHAR(2) CHECK(sex=’男’ OR sex=’女’),
age INT CHECK (age > 18 AND age < 60),
email VARCHAR2(50) UNIQUE,
address VARCHAR2(100) DEFAULT ‘广州’,
iphone VARCHAR2(20),
clazz_id INT,
FOREIGN KEY (clazz_id) REFERENCES tb_clazzz(ID)
)

INSERT INTO tb_stuu(id,NAME,sex,age,email,Address,iphone,clazz_id)
VALUES(1,’翠花’,’男’,20,’cuihua@163.com’,’北京’,’18620000001’,1);
INSERT INTO tb_stuu(id,NAME,sex,age,email,Address,iphone,clazz_id)
VALUES(2,’春花’,’男’,20,’chunhua@163.com’,’长沙’,’18620000002’,1);
INSERT INTO tb_stuu(id,NAME,sex,age,email,Address,iphone,clazz_id)
VALUES(3,’荷花’,’男’,20,’hehua@163.com’,’大连’,’18620000003’,2);

– 课程表
CREATE TABLE tb_course(
ID INT PRIMARY KEY,
NAME VARCHAR2(18),
CREDIT VARCHAR2(18) – 学分
);

INSERT INTO tb_course(ID,NAME,CREDIT)VALUES(1,’JAVASE’,5);
INSERT INTO tb_course(ID,NAME,CREDIT)VALUES(2,’JAVAEE’,10);

SELECT * FROM tb_clazzz;
SELECT * FROM tb_stuu;
SELECT * FROM tb_course;

/**
数据建模
1. 根据三个范式
2. 分析实体之间的关系, ER 图 Entity-Reference

一对一:一个人只有一个身份证,唯一外键关联或者主键关联。

一对多:一个班级可以有多个学生。一个学生只属于一个班级(clazz - student)
关联:一对多使用主外键关联,通常在多方(student)建立外键

多对多:一个学生可以选择多门课程,一门课程可以被多个学生选修 (student - course)
关联:多对多通常使用中间表(再多建一张表存储)关联数据
通常中间表会有两张表的id作为联合主键,并且作为外键指向关联表
*/
– 学生和课程的中间表,存储多对多的数据
create table tb_user_cource(
stuu_id int,
cource_id int,
grade int,
primary key (stuu_id, cource_id),
foreign key (stuu_id) references tb_stuu(id),
foreign key (cource_id) references tb_course(id)
);

– id为1的学生选择了JAVASE课程,怎么存储数据
insert into tb_user_cource(stuu_id, cource_id, grade)
values(1, 1, 90);

– id为1的学生选择了JAVAEE课程,怎么存储数据
insert into tb_user_cource(stuu_id, cource_id, grade)
values(1, 2, 89);

SELECT * FROM tb_clazz;
SELECT * FROM tb_stuu where id = stuu_id;
SELECT * FROM tb_course;
SELECT * FROM tb_user_cource

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值