Oracle对象关系数据库
2009-12-27 23:24
288 查看
一.对象—关系数据模型
1.Oracle允许数据属性有复杂的属性(如:结构化类型,表中表,大对象类型,汇集类型,结构化类型,允许继承,支持函数和过程。
a. 汇集类型:create type arrant as Array[4] int
b. 大对象类型:Blob ,二进制大对象;Clob,字符型大对象。返回的是大对象的指针。
c. 引用类型:引用有范围的,在范围之内。
d. 结构类型:也可用于定义表,类似于c,c++中的结构类型
e. 继承:类似于类的继承:
父类:
create type person (name varchar(20), address varchar(20))
子类:
create type student under person ( salary integer,department varchar(20))
f. 函数与过程:
二.对象—关系的sql
1.列对象:某列是用户定义的对象
2.行对象:整行是一个用户定义的对象
3.关系表:多个属性,某些列可能是对象,但不是整行都是对象
4.对象表:整行是一个对象类型,每一行是一个行对象。
1.定义关系表:
a.定义对象类型
Create type name_t as Object ( Lname varchar(20),Fname varchar(20));
Create table scientists of name_t;
Insert into scientists values(‘Einstein’,’Albert’);
Update scientists s set s=name_t(‘Einstein’,’Alb’)
Where value(s)=name_t(‘Einstein’,’Albert’)
b.定义关系表
create table teacher ( tname name_t ,roomNo varchar(50))
insert into teacher (name_t(“Jenny”,”Chen”),’001’)
select value(t) from teacher t where t.tname.Lname=”Jenny”
select value(t) from teacher t where t.tname=name_t(“jenny”,”chen”)
c.定义对象表
Create table NameList of name_t
两种select的方法:
1.取各属性,以各属性的方式取数据(表必须加别名)
Select N.Lname, N.Fname from NameList N where N.Fname=’chen’
2.以对象的形式取数据
select value(N) from NameList N where N.Fname=’chen’
2.引用数据类型:
Ref 指针指向行对象(有点象外键);
scoped refs 范围内的引用(有条件的外键),比ref占更少的存储空间,访问数据更有效。
Ref依赖:若相互依赖,则强制删除。Drop type name_t force
Ref装载数据:先加数据,再更新ref
Ref挂起:由于ref指向的对象被删除导致权限的改变,称ref挂起。
一.创建对象
Create type police_officer_t as object
( pol_person name_t,
Badge_number integer,
Partner ref police_officer_t);
二.创建对象表
Create table police_officers of police_officer_t
(
Primary key (barge_number), //定义主键
Scope for (partner) is police_officers //定义ref的范围
)
三.Select pol_person.lname from police_officers p
where p.partner.pol_person.rightname=’chen’
四.Select value(p),deref(p.partner) from police_officers p;
Insert into police_officers
Select value(p) ,100,ref(100) from people p, police_officers po
Where p.ssno=0332245 and po.badge_number=’990’
Update police_officers set p.partner=(select ref(po) from police_officers po where po.badg_number=100)
Where badg_number=990;
2.汇集类型:支持多子属性,表中嵌套表,数组。
1.创内嵌表:内嵌表与主表是分开放的,用指针指向内嵌表。
2.数组:有序的;与主表一起存放,有最大下标限制。
内嵌数组:
Eg:1.create type ext_t as array(4) of int;
2. create table phonebook( person name_t; extensions ext_t)
Select pb.person.lname,pb.extensions from phonebook pb
Where pb.person.rname=’chen’
Select pb.person.lname ,(select count(*) from table(pb.extensions))
from phonebook pb;
select pb.person from phonebook pb
where 104 in (select * from table(pb.extensions));
update phonebook pb set extensions=extension_t(345,999)
where pb.person.lname=’jenny’;
内嵌表:
1.建子表
Create type dependents_t as table of name_t;
2.建内嵌表
Create table employee (
Eid int,
Eperson name_t;
Dependents dependents_t; 表中嵌已定义的子表 dependents_t
Primary key (eid)
) nested table depentents store as dependent_tab
3.使用内嵌表
Select Dependents from employee where Eid=100;
Select eid from employee e
where 6<(select count(*) from table (e. Dependents )) //表强制类型转换
select eid from employee e where name_t(‘Lukas’,’Elbert’) in
(select d.lname from tables(e. Dependents) d);
Select d.ssno from table(select e. Dependents from employee e where e.eid=101);
Selct count(*) from table (select e. Dependents from employee e where e.eid=101);
insert into table(select e.dependents from employee e where e.eperson.lname=’jenny’)
values(3445,name_t(‘jenny’,’chen’),0);
1.Oracle允许数据属性有复杂的属性(如:结构化类型,表中表,大对象类型,汇集类型,结构化类型,允许继承,支持函数和过程。
a. 汇集类型:create type arrant as Array[4] int
b. 大对象类型:Blob ,二进制大对象;Clob,字符型大对象。返回的是大对象的指针。
c. 引用类型:引用有范围的,在范围之内。
d. 结构类型:也可用于定义表,类似于c,c++中的结构类型
e. 继承:类似于类的继承:
父类:
create type person (name varchar(20), address varchar(20))
子类:
create type student under person ( salary integer,department varchar(20))
f. 函数与过程:
二.对象—关系的sql
1.列对象:某列是用户定义的对象
2.行对象:整行是一个用户定义的对象
3.关系表:多个属性,某些列可能是对象,但不是整行都是对象
4.对象表:整行是一个对象类型,每一行是一个行对象。
1.定义关系表:
a.定义对象类型
Create type name_t as Object ( Lname varchar(20),Fname varchar(20));
Create table scientists of name_t;
Insert into scientists values(‘Einstein’,’Albert’);
Update scientists s set s=name_t(‘Einstein’,’Alb’)
Where value(s)=name_t(‘Einstein’,’Albert’)
b.定义关系表
create table teacher ( tname name_t ,roomNo varchar(50))
insert into teacher (name_t(“Jenny”,”Chen”),’001’)
select value(t) from teacher t where t.tname.Lname=”Jenny”
select value(t) from teacher t where t.tname=name_t(“jenny”,”chen”)
c.定义对象表
Create table NameList of name_t
两种select的方法:
1.取各属性,以各属性的方式取数据(表必须加别名)
Select N.Lname, N.Fname from NameList N where N.Fname=’chen’
2.以对象的形式取数据
select value(N) from NameList N where N.Fname=’chen’
2.引用数据类型:
Ref 指针指向行对象(有点象外键);
scoped refs 范围内的引用(有条件的外键),比ref占更少的存储空间,访问数据更有效。
Ref依赖:若相互依赖,则强制删除。Drop type name_t force
Ref装载数据:先加数据,再更新ref
Ref挂起:由于ref指向的对象被删除导致权限的改变,称ref挂起。
一.创建对象
Create type police_officer_t as object
( pol_person name_t,
Badge_number integer,
Partner ref police_officer_t);
二.创建对象表
Create table police_officers of police_officer_t
(
Primary key (barge_number), //定义主键
Scope for (partner) is police_officers //定义ref的范围
)
三.Select pol_person.lname from police_officers p
where p.partner.pol_person.rightname=’chen’
四.Select value(p),deref(p.partner) from police_officers p;
Insert into police_officers
Select value(p) ,100,ref(100) from people p, police_officers po
Where p.ssno=0332245 and po.badge_number=’990’
Update police_officers set p.partner=(select ref(po) from police_officers po where po.badg_number=100)
Where badg_number=990;
2.汇集类型:支持多子属性,表中嵌套表,数组。
1.创内嵌表:内嵌表与主表是分开放的,用指针指向内嵌表。
2.数组:有序的;与主表一起存放,有最大下标限制。
内嵌数组:
Eg:1.create type ext_t as array(4) of int;
2. create table phonebook( person name_t; extensions ext_t)
Select pb.person.lname,pb.extensions from phonebook pb
Where pb.person.rname=’chen’
Select pb.person.lname ,(select count(*) from table(pb.extensions))
from phonebook pb;
select pb.person from phonebook pb
where 104 in (select * from table(pb.extensions));
update phonebook pb set extensions=extension_t(345,999)
where pb.person.lname=’jenny’;
内嵌表:
1.建子表
Create type dependents_t as table of name_t;
2.建内嵌表
Create table employee (
Eid int,
Eperson name_t;
Dependents dependents_t; 表中嵌已定义的子表 dependents_t
Primary key (eid)
) nested table depentents store as dependent_tab
3.使用内嵌表
Select Dependents from employee where Eid=100;
Select eid from employee e
where 6<(select count(*) from table (e. Dependents )) //表强制类型转换
select eid from employee e where name_t(‘Lukas’,’Elbert’) in
(select d.lname from tables(e. Dependents) d);
Select d.ssno from table(select e. Dependents from employee e where e.eid=101);
Selct count(*) from table (select e. Dependents from employee e where e.eid=101);
insert into table(select e.dependents from employee e where e.eperson.lname=’jenny’)
values(3445,name_t(‘jenny’,’chen’),0);
相关文章推荐
- oracle中的数据库、用户、方案、表空间、表对象之间的关系 .
- oracle中的数据库、用户、方案、表空间、表对象之间的关系
- oracle中的数据库、用户、方案、表空间、表对象之间的关系
- 理清oracle中数据库、用户、方案、表空间、表对象之间的关系
- oracle中的数据库、用户、方案、表空间、表对象之间的关系
- oracle中的数据库、用户、方案、表空间、表对象之间的关系
- oracle中的数据库、用户、方案、表空间、表对象之间的关系 .
- oracle中的数据库、用户、方案、表空间、表对象之间的关系
- oracle中的数据库、用户、方案、表空间、表对象之间的关系
- oracle中的数据库、用户、方案、表空间、表对象之间的关系 参考
- oracle中的数据库、用户、方案、表空间、表对象之间的关系
- oracle中的数据库、用户、方案、表空间、表对象之间的关系
- oracle学习之路--数据库实例、方案、用户、表空间、表对象之间的关系
- oracle中的数据库、用户、方案、表空间、表对象之间的关系
- oracle中的数据库、用户、方案、表空间、表对象之间的关系
- Oracle 数据库对象-序列
- 数据库-ADONET-在数据集DataSet中使用关系对象DataRelation处理关系
- 对象-关系数据库之间的映射
- Oracle - 数据库的实例、表空间、用户、表之间关系