(此篇文章只需要了解既可以了)
嵌套表
定义:在一个表中还包含另外一个子表。
数据库在创建数据表的时候都要指定字段的类型,所以嵌套表本身也需要同样指定类型,所以这种类型需要单独定义。
创建类型语法:create type project_ty as object(
字段1 数据类型,
字段2 数据类型,
.....
);
/
范例:一个部门可能承接多个项目
1,先创建类型
create type project_ty as object(
proid number(4),
proname varchar2(50),
prodate date
);
/
2,类型创建成功,需要为类型指定名称
create type project_nt as table of project_ty;名称为project_nt
3,创建部门嵌套表
create table department(
deptno number(2) primary key not null,
dname varchar2(50) not null,
projects project_nt
) nested table projects store project_nt_tab_temp;
4,插入数据
insert into department(deptno,dname,projects)
values(1,'技术部',
project_nt(
project_ty(1001,'erp',sysdate),
project_ty(1002,'crm',sysdate),
project_ty(1003,'oa',sysdate)
)
);
5,查询数据
select * from department;
查询一个部门的全部项目时需要查询嵌套表
select * from table(select projects from department where deptno=1);
更新项目编号为1001的项目名称为测试项目
update table(select projects from department where deptno=1) pro
set value(pro)=project_ty('1001','测试项目',
to_date('1998-02-12','yyyy-mmydd')) where pro.proid=1001;
可变数组
可变数组属于嵌套表的升级版,在可变数组中,实际上就是将内部的嵌套表的内容的长度进行了限制。
例:一个部门都有多个工人。首先要做出一个工人的类型
create type worker_info as object(
id number,
name varchar2(50),
sex varchar2(6)
);
/
定义数组类型
create type worker_info_list as varray of worker_info;
定义部门表,一个部门中可能存在多个工人
create table departmen(
deptno number(2) primary key not null,
dname varchar2(50) not null,
workers worker_info_list
);
插入数据
insert into department(deptno,dname,projects)
values(20,'后勤部',
worker_info_list(
worker_info(1,'张三','男'),
worker_info(2,'李四','男'),
worker_info(3,'王五','女')
)
);
数据库设计范式
1,第一范式:保证数据表中的每一个字段不可分并且每个列的有意义
2,第二范式:所有的关联关系在关系表中出现,完成多对多的关系
3,第三范式:一对多的关系
数据库的唯一原则:数据库的关联查询越少越好,sql语句的复杂度越低越好