聊天室项目

数据库设计说明书  


目录

第一部分 项目描述 3

1.1项目目的 3

第二部分 需求和开发环境 3

2.1使用技术和开发环境 3

2.2项目需求 3

2.3详细功能 3

2.4 E-R 3

2.5数据表的设计 3

2.6数据库约束的设计 4

2.7数据库序列的设计 4

2.8数据库索引的设计 4

2.9数据库视图的设计 5

2.10数据库索引的设计 5

2.10数据库索引的设计 5

2.11数据库触发器的设计 6

2.12数据库函数的设计 6

2.13数据库存储过程的设计 6

第三部分 项目总结 6

 


第一部分 项目描述

1.1项目目的

以前身处不同城市的朋友之间交流感情、互通信息主要通过写信,根据路程的远近一封信寄出去可能需要几天甚至十几天,朋友如果再写回信,往返一次的时间就更长了;随着科技的发展,出现了电报、电话,人与人之间的沟通变得更加迅速和高效;而伴随着计算机的普及和互联网的飞速发展,出现了MSNQQ等各种可以即时通讯的聊天工具,还有数不清的在线聊天室,越来越多的人选择通过网上聊天来交流感情和互通信息。

第二部分 需求和开发环境

2.1使用技术和开发环境

Oracle11g

2.2项目需求

聊天系统最终要实现的功能与QQ大致相同,主要包括聊天(支持文本、语音和视频)、传送文件和远程协助等功能。在此,只实现其最基本功能——以文本形式进行聊天。

2.3详细功能

1. 注册用户管理

包括用户的注册、用户基本信息的修改(包括修改密码)、用户的删除、用户的登录验证,以及用户信息的查看和查找等。

2. 管理员管理

包括管理员的添加、修改、删除、登录验证和查询等。

3. 好友管理

包括申请添加好友、对添加好友的验证信息进行处理、删除好友(从好友列表中删除)等。

4. 聊天信息管理

包括发出聊天信息、显示聊天信息等。

 

2.4 E-R

    

 Oracle 数据库 聊天室项目

 

2.5数据表的设计

1

表名

t_user (用户表)

列名

描述

数据类型

/非空

约束条件

Userid  

用户编号

Number(40)

非空

主键(自增),初始值10001

Pwd  

密码

VARCHAR2(40)

非空

 

Nickname  

昵称  

VARCHAR2(20)

非空

 

Sex  

性别  

NUMBER(1)

 

01

Birthday  

出生日期

DATE

 

 

Currstate

当前状态

NUMBER(1)

 

默认值0,外键

Policy

交友策略

NUMBER(1)

 

外键

 

 

表名

t_onlinestate(用户在线状态表)

列名

描述

数据类型

/非空

约束条件

Stateid  

状态编号

Number(1)

非空

主键

Statedesc

状态描述

VARCHAR2(10)

非空

唯一

 

表名

t_friendshippolicy(交友策略表)

列名

描述

数据类型

/非空

约束条件

Polid  

编号

Number(1)

非空

主键

Policy  

交友策略

VARCHAR2(20)

非空

唯一

 

表名

t_friend(好友表)

列名

描述

数据类型

/非空

约束条件

Ufid  

编号

Number(10)

非空

主键(自增)

Userid  

用户编号

 Number(20)

非空

外键

Friendid  

好友编号

 NUMBER(20)

非空

外键

 

 

表名

t_message(聊天消息表)

列名

描述

数据类型

/非空

约束条件

Messageid  

编号

Number(20)

非空

主键(自增)

Fromid  

信息发出者

 Number(20)

非空

外键

Toid  

信息接收者

 NUMBER(20)

非空

外键

Content  

信息内容

VARCHAR2(255)

 

 

State

是否已读

NUMBER(1) 

默认值

State in (0,1)

Sendtime  

发出时间

DATE    

默认值

 

 

 

2.6数据约束的设计

功能用户密码长度大于5

实现5<LENGTH(PWD)

 

功能功能:性别只能为01

实现: CHECK( Sex in (0,1)),

 

功能:Userid 外键参考t_user表的Userid字段

实现: Userid NUMBER(20) not null references t_user(Userid)

 

功能:Friendid 外键参考t_user表的Userid字段

实现: Friendid NUMBER(20) not null references t_user(Userid)

 

功能:Fromuserid 外键参考t_user表的Userid字段

实现: Fromuserid NUMBER(20) not null references t_user(Userid)

 

功能:Touserid 外键参考 t_user表的Userid字段

实现: Touserid NUMBER(20)  not null references t_user(Userid)

 

功能:时间为系统默认时间

实现: Sendtime DATE default sysdate   

 

功能:消息读取的状态是01

实现STATE BETWEEN 0 AND 1

 

 

2.7数据序列的设计

 

功能T_USER表的自增序列,从10001开始,最大9999999,每次增长为1,不循环

实现create sequence seq_user  --自增序列

    increment by 1

    start with 10001

    maxvalue 999999999

    nocycle

    cache 10;

 

功能T_FRIEND表的自增序列,标准从1开始,每次增长为1

实现create sequence seq_friend;

 

功能T_FRIEND表的自增序列,标准从1开始,每次增长为1

实现create sequence seq_friend;

 

功能T_MESSAGE表的自增序列,标准从1开始,每次增长为1

实现create sequence seq_message;

 

功能T_ADMIN表的自增序列,标准从1开始,每次增长为1

实现create sequence seq_admin; ;

 

2.9数据视图的设计

 

功能创建关于T_MESSAGE属性的视图,用于查询某个好友的聊天记录

实现create view v_message as

select fromid,toid,Content,sendtime from t_message;

 

功能创建关于T_FRIEDN属性的视图:查询某个用户的所有好友。

实现create view v_friend as

select userid,friendid from t_friend;

功能描述3

实现代码3

…………..

 

2.11数据触发器的设计

 

功能当数据插入到T_USER表中的时候,调用序列自增USERID

实现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;

 

功能当数据插入到T_FRIEND表中的时候,调用序列SEQ_FRIEND自增TFID

实现create or replace trigger tir_fri 当数据插入到表中的时候,调用序列

before insert on T_FRIEND for each row

begin

  select seq_friend.nextval

         into :new.tfid from dual;

end;

 

功能:当数据插入到T_MESSAGE表中的时候,调用序列SEQ_MESSAGE自增MESSAGEID

实现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;

 

功能:当数据插入到T_ADMIN表中的时候,调用序列SEQ_ADMIN自增ADMINID

实现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;

2.13数据存储过程的设计

 

功能:将用户提供的一些基本信息输入到用户表的过程

实现create or replace procedure register_proc(

  pwd varchar2,

  nickname varchar2,

  sex number,

  birthday date,

  currstate number,

  friendshippolicy number

)

is

begin

  insert into t_user values(seq_user.nextval,pwd,nickname,sex,birthday,currstate,friendshippolicy);

end;

 

功能查询每个用户的所有好友

实现create or replace procedure all_friend_proc

is

    cursor all_friend_cur is select t_friend.userid from t_friend ;

    v_userid t_friend.userid%type;

    v_friendid t_friend.friendid%type;

    v_nickname t_user.nickname%type;

begin

  for fd in all_friend_cur loop

    select t_friend.userid,t_friend.friendid,t_user.nickname

    into v_userid,v_friendid,v_nickname from t_friend,t_user

    where t_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_userid t_user.userid%type;

    v_touserid t_message.touserid%type;

    v_fromuserid t_message.fromuserid%type;

    v_content t_message.content%type;

    cursor all_fromuserid_cur is select fromuserid from t_message ;

begin

    for fud in all_fromuserid_cur loop

        select t_user.userid,t_message.touserid,t_message.content into v_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;

 

第三部分 项目总结

  这是第一次在基地接触有关数据库的项目,跟以往在学校的学习有所不同的是,基地的强度可能更高,同时也是全身心的投入到项目的实践当中来,其中之前学习的只是略微显得有些零零散散,项目可以将这些知识更好的融合在一起,更加的具有企业的体系。

  我们开始这个项目的第一步就是建立完整思维的E-R图,将表建立好,将属性创建好,将约束条件和检查约束添加上,将外键添加上,第一次使用数据库中的模型工具,多少还是有很多的不足和不熟练的存在,希望下次做项目的时候可以有更大的进步。

  E-R图创建好之后就相当于完成了很重要的一部分,剩下的应该就是数据库的查询。首先创建了两个视图用来查询某个好友的聊天记录和查询某个用户的所有好友。接下来,又用了几个存储过程来实现存储。当然了,在数据库的查询时候,有了方方面面的问题,当然是过程触发器这种编译错误的问题,他的报错往往并不会给你明确的答复,只会告诉你有错,然后你就需要慢慢的一点一点的去找哪里的错误,比如说:书写错误,格式错误,哪里的用法不规范了等等一些列的问题,都是猝不及防的。

  所以,还是需要对自己常见的数据库有一个详细的了解,对数据库属性的命名也要规范,不然自己也不知道自己写的是什么,还有对用法有足够的使用了解,这应该是第一次项目所学到的经验。

 

 

相关文章:

  • 2021-04-24
  • 2021-12-18
  • 2021-05-23
  • 2021-07-05
  • 2022-12-23
  • 2022-12-23
  • 2021-09-16
  • 2021-12-05
猜你喜欢
  • 2021-05-29
  • 2021-06-25
  • 2021-04-04
  • 2021-11-16
  • 2022-01-08
  • 2021-06-21
  • 2021-07-19
相关资源
相似解决方案