【雪野实训记录】Oracle聊天室-L1阶段项目案例

前端之家收集整理的这篇文章主要介绍了【雪野实训记录】Oracle聊天室-L1阶段项目案例前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

/*阶段项目案例
第一部分 案例描述
案例目的
学习Oracle数据库的基本概念、建库、建表、基本增删改查,复杂查询(条件、关联、复合),,同时学习数据库对象:视图、索引的使用,还有oralce独有的两个数据库对象:序列和同义词的使用方法和场合,培养学生关于数据库的设计能力与数据的操作能力。
案例难度
★★★
案例覆盖技能点
1、 Oracle数据库基本概念
2、 建库、建表、建约束
3、 实现基本增删改查等数据的操作
1) 对数据库进行增加
2) 删除
3) 修改
4、 根据业务的需要建视图、索引、序列和同义词
1) 建视图
2) 建索引
3) 建序列
4) 建同义词
5、 高级查询技术
1) 会使用 group by、关键字
2) 会使用CASE…WHEN…THEN…
3) 会使用关联查询
4) 会使用子查询
推荐案例完成时间
1天
第二部分 需求和开发环境
使用技术和开发环境
Oracle10g
背景
以前身处不同城市的朋友之间交流感情、互通信息主要通过写信,根据路程的远近一封信寄出去可能需要几天甚至十几天,朋友如果再写回信,往返一次的时间就更长了;随着科技的发展,出现了电报、电话,人与人之间的沟通变得更加迅速和高效;而伴随着计算机的普及和互联网的飞速发展,出现了MSN、QQ等各种可以即时通讯的聊天工具,还有数不清的在线聊天室,越来越多的人选择通过网上聊天来交流感情和互通信息。
案例需求
聊天系统最终要实现的功能与QQ大致相同,主要包括聊天(支持文本、语音和视频)、传送文件和远程协助等功能。在此,只实现其最基本功能——以文本形式进行聊天。*/
/*1. 注册用户管理
包括用户注册用户基本信息的修改包括修改密码)、用户删除用户登录验证,以及用户信息的查看和查找等。
2. 管理员管理
包括管理员添加修改删除登录验证和查询等。
3. 好友管理
包括申请添加好友、对添加好友的验证信息进行处理、删除好友(从好友列表中删除)等。
4. 聊天信息管理
包括发出聊天信息、显示聊天信息等。
*/




————————————————————————————————————————————————————————————————————————————

第一部分 项目描述

1.1项目目的

学习Oracle数据库的基本概念、建库、建表、基本增删改查,复杂查询(条件、关联、复合),同时学习数据库对象:视图、索引的使用,还有oralce独有的两个数据库对象:序列和同义词的使用方法和场合,培养学生关于数据库的设计能力与数据的操作能力。

第二部分 需求和开发环境

2.1使用技术和开发环境

Oracle-11g

2.2项目需求

教学质量是学校生存与发展的生命线,不断提高课堂教学水平是学校和每一位教师的共同心愿。及时了解课堂教学的主体—学生对教学情况的评价及建议,有利于教师发现自己教学中的优点以及不足,从而进一步改进教学方法,提高教学水平。为了更好的提高教学水平,建立学校与学员的更好勾通,院领导研究决定研发本系统,并提供考核内容管理、反馈项目管理、反馈表管理、数据统计分析等主要功能,本阶段案例主要以考核内容管理为主要分析目标。

2.3详细功能

考核内容管理、反馈项目管理、反馈表管理、数据统计分析等主要功能

2.4 E-R


2.5数据表的设计

表1 用户

表名

t_user (用户表)

列名

描述

数据类型

空/非空

约束条件

Userid

用户编号

NUMBER(38)

非空

主键(自增)

Pwd

密码

NVARCHAR2(100)

非空

唯一

Nickname

昵称

NVARCHAR2(10)

非空

Sex

性别

NUMBER(1)

Birthday

出生日期

DATE

Currstate

当前状态

NUMBER(1)

默认值0,外键

friendshipplicy

交友策略

NUMBER(1)

外键

表2 用户状态表

表名

t_onlinestate (用户状态表)

列名

描述

数据类型

空/非空

约束条件

Stateid

状态编号

NUMBER(1)

非空

主键

Statedesc

状态描述

NVARCHAR2(20)

非空

唯一

表3 好友表

表名

t_friend (好友表)

列名

描述

数据类型

空/非空

约束条件

Ufid

编号

NUMBER(38)

非空

主键(自增)

Userid

用户编号

NUMBER (38)

非空

外键

Friendid

好友编号

NUMBER (38)

非空

外键

表4 交友策略表

表名

t_friendshippolicy(交友策略表)

列名

描述

数据类型

空/非空

约束条件

Polid

编号

NUMBER(1)

非空

主键

Policy

交友策略

NVARCHAR2(20)

非空

唯一

表5 聊天信息表

表名

t_message(聊天消息表)

列名

描述

数据类型

空/非空

约束条件

Messageid

编号

NUMBER(38)

非空

主键(自增)

Fromuserid

信息发出者

NUMBER(38)

非空

外键

Touserid

信息接受者

NUMBER(38)

非空

外键

Coutent

信息内容

NVARCHAR2(50)

messagetype

信息类型

NUMBER(1)

State

是否已读

NUMBER(1)

Sendtime

发出时间

DATE

表5 管理员

表名

t_admin(管理员表)

列名

描述

数据类型

空/非空

约束条件

Admin

编号

NUMBER(10)

非空

主键(自增)

Adminname

管理员名称

NVARCHAR2(20)

非空

唯一

Adminpwb

密码

NVARCHAR2(100)

非空

2.6数据库约束的设计

功能:在user表中设置userid为主键

实现: UseridNUMBER(38) primary key not null

功能:在user表中将stateIid设置为表t_onlinestate的外键

实现:Currstate NUMBER(1)default 0 references t_onlinestate(Stateid)

功能:在user表中将Polid设置为表t_friendshippolicy的外键

实现:friendshippolicyNUMBER(1) references t_friendshippolicy(Polid)

功能:在t_onlinestate设置stateid为主键

实现:Stateid NUMBER(1)primary key not null

功能t_friendshippolicy设置Polid为主键

实现:Polid NUMBER(1)primary key not null

功能:在t_friend设置Ufid为主键

实现:Ufid NUMBER(38)primary key not null

功能:在t_message表中设置Messageid为主键,FromuseridTouserid为外键

实现:MessageidNUMBER(38) primary key not null,-- 非空 主键(自增)
Fromuserid NUMBER(38) not null references t_user(Userid),--
非空 外键
Touserid NUMBER(38) not null references t_user(Userid),--
非空 外键

功能t_admin设置Adminid为主键

实现:AdminidNUMBER(10) primary key not null,-- 非空 主键(自增)

2.7数据库序列的设计

功能:在user表中建立seq_user序列并设置取值范围

实现:drop sequenceseq_user;
create sequence seq_user
increment by 1
start with 10001
maxvalue 999999999
nocycle
cache 10;

功能:在friend表中建立seq_friend序列

实现:create sequenceseq_friend;

功能:在admin表中建立seq_admin序列

实现:create sequenceseq_admin;

2.8数据库视图的设计

功能查询某个好友的聊天记录
实现:drop view v_message;
create view v_message as
select fromuserid,touserid,Content1,sendtime from t_message;

select * from v_message where fromuserid = &fromuserid and touserid =&touserid;
功能查询某个用户的所有好友。
实现:create view v_friendas
select userid,friendid from t_friend;
select * from v_friend where userid = &userid;

2.10数据库触发器的设计

功能:在插入数据之前,先给userid赋值,以免发生null错误

实现:create or replacetrigger tir_user

before insert on t_user for each row

begin

selectseq_user.nextval

into :new.Userid from dual;

end;

功能:在插入数据前,先给每一行附上序号,以免发生null错误

实现:create or replacetrigger tir_friend

before insert on t_friend for each row

begin

select seq_friend.nextval

into :new.Ufid from dual;

end;

功能:在插入数据前,先给每一行附上序号,以免发生null错误

实现:create or replacetrigger tir_messaged

before insert on t_message for each row

begin

select seq_message.nextval

into :new.Messageid from dual;

end;

功能:在插入数据前,先给每一行附上序号,以免发生null错误

实现:create or replacetrigger tir_admin

before insert on t_admin for each row

begin

select seq_admin.nextval

into :new.Adminid from dual;

end;

2.11数据库函数的设计

功能显示所有好友的信息

实现:

create or replace procedure all_friend_proc

is

cursorall_friend_cur is select t_friend.userid from t_friend ;

v_useridt_friend.userid%type;

v_friendidt_friend.friendid%type;

v_nicknamet_user.nickname%type;

begin

for fd inall_friend_cur loop

selectt_friend.userid,t_friend.friendid,t_user.nickname

intov_userid,v_friendid,v_nickname from t_friend,t_user

wheret_friend.userid = t_user.userid and t_friend.userid = fd.userid;--关联查询

dbms_output.put_line(v_userid||' '||v_friendid||' '||v_nickname);

end loop;

end;

功能查询每个用户和不同好友的所有聊天记录

实现:

create or replace procedure message_proc

is

v_useridt_user.userid%type;

v_touseridt_message.touserid%type;

v_fromuseridt_message.fromuserid%type;

v_contentt_message.content%type;

cursorall_fromuserid_cur is select fromuserid from t_message ;

begin

for fud inall_fromuserid_cur loop

selectt_user.userid,t_message.touserid,t_message.content intov_userid,v_touserid,v_content from t_message,t_user where t_user.userid =t_message.fromuserid and fromuserid=fud.fromuserid;

dbms_output.put_line(v_userid||' '||v_touserid||' '||v_fromuserid||''||' '||v_content);

end loop;

end;

2.12数据库存储过程的设计

功能:将此功能设计成一个存储过程,实现大量的用户进行注册功能,实现数据的存储。

实现:create or replaceprocedure register_proc(

pwd varchar2,

nickname varchar2,

sex number,

birthday date,

currstate number,

friendshippolicynumber

)

is

Begin Insert

into t_uservalues(userid_seq.nextval,pwd,nickname,sex,birthday,currstate,friendshippolicy);

end;

set serveroutput on;

exec register_proc('123','qwert',1,'01-8-2017',2,3);


附录代码

ister_proc('123',3);


--1. 用户
create table t_user(
--列名 描述 数据类型(精度范围) 空/非空 约束条件
Userid NUMBER(38) primary key not null,-- 非空 主键(自增),初始值10001
Pwd NVARCHAR2(100) not null,-- 非空
Nickname NVARCHAR2(10) not null,-- 非空
Sex NUMBER(1) CHECK( Sex in (0,1)),
Birthday DATE,
Currstate NUMBER(1) default 0 references t_onlinestate(Stateid),-- 默认值0,外键
friendshippolicy NUMBER(1) references t_friendshippolicy(Polid)-- 外键
);
insert into t_user(Pwd,Nickname,Sex,Birthday,Currstate,friendshippolicy) values
('123456','Cong',sysdate,1);
select * from t_user;


drop sequence seq_user; --序列
create sequence seq_user
increment by 1
start with 10001
maxvalue 999999999
nocycle
cache 10;


create or replace trigger tir_user --触发器
before insert on t_user for each row
begin
select seq_user.nextval
into :new.Userid from dual;
end;


--2. 用户状态表
create table t_onlinestate(--(用户在线状态表)
--列名 描述 数据类型(精度范围) 空/非空 约束条件
Stateid NUMBER(1) primary key not null,-- 非空 主键
Statedesc NVARCHAR2(10) unique not null-- 非空 唯一
);
insert into t_onlinestate values (1,'在线');
insert into t_onlinestate values (2,'离线');
insert into t_onlinestate values (3,'隐身');
insert into t_onlinestate values (4,'忙碌');
select * from t_onlinestate;
/*用户状态表里的数据如下:
编号 用户在线状态
1 在线
2 离线
3 隐身
4 忙碌
*/



--3.交友策略表
create table t_friendshippolicy(--(交友策略表)
--列名 描述 数据类型(精度范围) 空/非空 约束条件
Polid NUMBER(1) primary key not null,-- 非空 主键
Policy NVARCHAR2(20) unique not null-- 非空 唯一
);
insert into t_friendshippolicy values (1,'允许任何人加我为好友');
insert into t_friendshippolicy values (2,'不允许任何人加我为好友');
insert into t_friendshippolicy values (3,'经过验证才允许别人加我为好友');
select * from t_friendshippolicy;
/*交友策略表数据如下:
编号 交友策略
1 允许任何人加我为好友
2 不允许任何人加我为好友
3 经过验证才允许别人加我为好友
*/


--4. 好友表
create table t_friend(--(好友表)
--列名 描述 数据类型(精度范围) 空/非空 约束条件
Ufid NUMBER(38) primary key not null,-- 非空 主键(自增)
Userid NUMBER(38) not null references t_user(Userid),-- 非空 外键
Friendid NUMBER(38) not null references t_user(Userid) -- 非空 外键
);


insert into t_friend(userid,friendid) values (10001,10002);
insert into t_friend(userid,friendid) values (10002,10003);
insert into t_friend(userid,friendid) values (10003,10005);
insert into t_friend(userid,friendid) values (10004,10003);
select * from t_friend;


create sequence seq_friend;


create or replace trigger tir_friend
before insert on t_friend for each row
begin
select seq_friend.nextval
into :new.Ufid from dual;
end;

--5. 聊天信息表
create table t_message(--(聊天消息表)
--列名 描述 数据类型(精度范围) 空/非空 约束条件
Messageid NUMBER(38) primary key not null,-- 非空 主键(自增)
Fromuserid NUMBER(38) not null references t_user(Userid),-- 非空 外键
Touserid NUMBER(38) not null references t_user(Userid),-- 非空 外键
Content1 VARCHAR2(50),
messagetype NUMBER(1) CHECK(messagetype in (0,
State NUMBER(1) default 0 CHECK(State in (0,
Sendtime DATE default sysdate-- 默认值
);
insert into t_message(fromuserid,content1,messagetype) values
(10004,10005,'XXXXXXXXXXXXXXXXXXXXXXX',0);
insert into t_message(fromuserid,messagetype) values
(10002,'阿萨大神大所大所大所大所多',0);
select * from t_message;

create sequence seq_message;


create or replace trigger tir_messaged
before insert on t_message for each row
begin
select seq_message.nextval
into :new.Messageid from dual;
end;

--6. 管理员表 create table t_admin(--(管理员表) --列名 描述 数据类型(精度范围) 空/非空 约束条件 Adminid NUMBER(10) primary key not null,-- 非空 主键(自增) Adminname NVARCHAR2(20) unique not null,-- 非空 唯一 Adminpwd NVARCHAR2(100) not null-- 非空 ); insert into t_admin(adminname,adminpwd) values ('sku','111'); select * from t_admin; create sequence seq_admin; --序列 create or replace trigger tir_admin before insert on t_admin for each row--触发器 begin select seq_admin.nextval into :new.Adminid from dual; end;

原文链接:https://www.f2er.com/oracle/208139.html

猜你在找的Oracle相关文章