oracle练习(mldn视频课程)五

(此篇文章只需要了解既可以了)

嵌套表
定义:在一个表中还包含另外一个子表。
数据库在创建数据表的时候都要指定字段的类型,所以嵌套表本身也需要同样指定类型,所以这种类型需要单独定义。
创建类型语法: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语句的复杂度越低越好

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值