数据库设计
一 : 序言
1: 预期的读者
系统的开发设计人员、业务人员以及系统管理人员。
2:数据库的说明
本数据库采用分布式部署,oracle数据库,数据库全局数据库名##、用户名:##、密码:##、操作空间: ##
3 :目的和作用
业务分析,系统设计中对信息的描述进一步分析并加以总计,抽象出数据集合(数据库表)。对数据集合
做进一步分析,确定集合之间的关系并最终形成数据库物理模型,以便开发人员建立物理数据库。
二:数据库设计
A:抽象数据对象
a:主要业务系统分析
根据系统的物流描述,可以抽象出以下数据集合:
普通的用户、会议管理、设备管理,会议申请、会议室管理,按照业务及系统功能总结为以下对象
用户、会议申请信息、会议审批、会议设备
b:需求分析
根据系统需求分析内容进一步确定数据对象。由于系统需求分析中考虑到会议室和会议设备间有一定
的区别和联系,即会议室一般包含固定设备和移动设备,两者之间并不是并列关系而是所属关系,所
以将会议室默认含有固定设备,这样,设备只有移动设备分开,并提出单独的信息维护功能,数据库
对象也进一步细化将会议设备分成,会议室和相关设备。会议申请和会议审批操作的都是相同对象所
以将两个数据对象进行合并,其他数据对象没有变化。
同对象总结数据对象:
用户信息
会议信息
会议室
会议设备所以将两个数据对象进行合并,其他数据对象没有变化。
B:数据库结构设计
根据系统的分布式部署设计,数据库将部署到一部独立的计算机中。根据前期的
分析,系统将有大量的数据存放入数据库。预留数据库空间500m,日增长约3m,
日志空间1G,日增长5m。
数据库位置:*oracle9ipath*/n2ms/db/
日志位置:*oracle9ipath*/n2ms/log/
C:数据库设计命名规范
1,表名命名规则
本数据库使用的表名一律采用有意义的小写英文字符命名,考虑将来编码方便,表名不
使用‘-’连接相关
2,表项命名规则
本数据库各个表的每个字段,依照表名命名规则,全部使用有意义的小写英文字符
命名,字段名不适用‘-’连接相关字符,方便编码书写。
D:数据库的逻辑设计
表设计中应注意的问题:
1.对于字符类型的字段,要仔细确认字段的可能长度。在oracle数据库设计中,
一般来说,对于定长的字符数据字段,取字符类型(char),对于不定长的,取变长字
符类型(varchar)。
2.对于以分类形式出现的字段,建议不使用字符类型,而使用数字类型。
如:货物是否配送为是或(和)否;如果用字符类型,则将这些字符串需要入库;
如果使用数字类型分别用1、0代表高职、中职、低职,则入库的是数字信息,从
程序编写的角度考虑,后者更好维护一些,主要体现在如果是多语言版本时,我们
不需要在程序中将这些字符串信息进行判断处理。
a:数据库表名汇总
数据库表名 | 中文名 | 文字说明 |
meet_app | 会议申请信息 | 保存所开会议的基本信息 |
meet_room | 会议室 | 保存会议室情况的相关信息 |
facilty_meet | 设备信息 | 保存会议设备的相关信息 |
Equipment_stype | 设备类型 | 保存相关设备类型信息 |
users_inf | 用户信息 | 保存系统用户的基本信息 |
power_info | 权限信息 | 保存系统的权限信息 |
role_u | 角色 | 保存相关角色信息 |
dept_u | 部门信息 | 保存相关部门信息 |
e_mail | 邮件信息 | 保存邮件信息 |
file_inf | 文件信息 | 保存相关文件信息 |
l Meet_app
表2-2 meet_app表项
中文 | 英文 | 数据类型 | 可否空 | 初始值 | 说明 |
会议信息主键 | meet_id | Number | 否 |
| 主键,流水自增 |
会议主题 | meet_title | Variable characters (30) | 可 |
|
|
主要内容 | meet_content | Variable characters (300) | 可 |
|
|
会议开始时间 | start_time | Date & Time | 可 |
|
|
会议结束时间 | end_time | Date & Time | 可 |
|
|
与会人数 | meet_num | Long float | 可 |
|
|
审批状态 | meet_state | Variable characters (10) | 可 |
|
|
审批意见 | meet_idea | Variable characters (100) | 可 |
|
|
l meet_room
表2-3 meet_room表项
中文 | 英文 | 数据类型 | 可否空 | 初始值 | 说明 |
会议室主键 | meetroom_id | Number | 否 |
| 主键,流水自增 |
会议室名称 | meetroom_name | Variable char(30) |
|
|
|
会议室地址 | meetroom_addr | Variable characters (30) | 可 |
|
|
可用状态 | possib_state | Short integer | 可 |
|
|
目前状态 | now_state | Short integer | 可 |
|
|
容纳人数 | meetroom_num | Number | 可 |
|
|
l facilty_meet
表2-4 facilty_meet表项
中文 | 英文 | 数据类型 | 可否空 | 初始值 | 说明 |
设备主键 | facility_id | Number | 否 |
| 主键,流水自增 |
设备名称 | facility_name | Variable characters (40) | 可 |
|
|
设备购入时间 | buy_time | Date | 可 |
|
|
占用状态 | on_state | Number (10) | 可 |
|
|
可用状态 | posib_state | Short integer | 可 |
|
|
设备标识 | facility_tag | Variable characters (10) | 否 |
|
|
l user_info
表2-5 user_info表项
中文 | 英文 | 数据类型 | 可否空 | 初始值 | 说明 |
用户主键 | us_id | Number | 否 |
| 主键,流水自增 |
用户名称 | us_name | Variable characters (30) | 可 |
|
|
用户登陆账号 | us_account | Variable characters (30) | 可 |
|
|
所属部门 | us_department | Variable characters (30) | 可 |
|
|
用户密码 | us_psw | Variable characters (30) | 可 |
|
|
表2-6 power_info表项
中文 | 英文 | 数据类型 | 可否空 | 初始值 | 说明 |
权限主键 | power_id | Number | 否 |
| 主键,流水自增 |
权限描述 | power_describe | Variable characters (30) | 可 |
|
|
表2-7 e_mail表项
中文 | 英文 | 数据类型 | 可否空 | 初始值 | 说明 |
邮件主键 | mail_id | Number | 否 |
| 主键,流水自增 |
主题 | topic | Variable characters (30) | 可 |
|
|
发送时间 | sendtime | Date | 可 |
|
|
内容 | mail_content | Variable characters | 可 |
|
|
表2-8 role_u表项
中文 | 英文 | 数据类型 | 可否空 | 初始值 | 说明 |
角色主键 | role_id | Number | 否 |
| 主键,流水自增 |
角色名字 | role_name | Variable characters (30) | 可 |
|
|
表2-9dept_u表项
中文 | 英文 | 数据类型 | 可否空 | 初始值 | 说明 |
部门主键 | dept_id | Number | 否 |
| 主键,流水自增 |
部门名字 | dept_name | Variable characters (30) | 可 |
|
|
表2-10 file_inf表项
中文 | 英文 | 数据类型 | 可否空 | 初始值 | 说明 | |
文件信息主键 | flileinf_id | Number | 否 |
| 主键,流水自增 | |
文件大小 | file_size | Long float | 可 |
|
| |
文件名称 | file_name | Variable characters (30) | 可 |
|
| |
文件格式 | file_format | Variable characters (10) | 可 |
|
|
图中表示多对一关系,三叉线表示对应的多方表,多对多应该为。
表之间的关联设计
在数据库ER逻辑模型的基础上确定ER物理模型,通过主外键的约束明确表之间的关系。该物理模型可直接映射到数据库中进行物理操作,以便据此建立数据库结构。
Table | column | Code | description |
会议室 | meetroom_id | 主键索引 | |
会议室名称 | meetroom_name |
| |
会议室地址 | meetroom_addr |
| |
可用状态 | possib_state |
| |
容纳人数 | meetroon_num |
| |
目前状态 | now_state |
| |
会议申请 | meet_id | 主键索引 | |
会议室id | meetroom_id | 由会议室信息表引用的外键 | |
会议主题 | meet_title |
| |
主要内容 | meet_content |
| |
与会人数 | meet-num |
| |
| |||
| |||
审批意见 | meet-idea | 对应建议修改的会议申请要写明原因,如:会议内容欠妥、申请会议室冲突等 | |
审批状态 | meet_state | 会议申请有未审批、审批通过、建议修改三种状态 | |
会议设备 | facility_id | 主键索引 | |
设备名称 | facility_name |
| |
由设备类型表引用的外键 | |||
当前状态 | now-state |
| |
可用状态 | posib_state |
| |
购入时间 | buy_time |
| |
设备标识 | facility_tag | 标志移动还是固定设备 | |
设备类型 | 主键索引 | ||
| |||
用户信息 | us_id | 主键索引 | |
部门id | dept_id |
| |
姓名 | us_name |
| |
账号 | us_account |
| |
密码 | us_psw |
| |
部门 | us_department |
| |
文件信息 | 主键索引 | ||
meet_id | 由会议信息表引用的外键 | ||
| |||
| |||
file_type |
| ||
部门 | dept_id | 主键索引 | |
| |||
权限信息 | 主键索引 | ||
power_describe |
| ||
角色信息 | 角色主键 | role_id | 主键索引 |
角色名字 | role-name |
| |
role_power | 角色主键 | role_id |
|
权限主键 |
| ||
邮件 | 邮件id | mail_id | 主键 |
主题 | topic |
| |
发送时间 | sendtime |
| |
内容 | mail_content |
| |
会议申请—设备 | 会议申请id | meet_id | 主键索引 |
设备id | facility_id | 主键索引 | |
用户—邮件 | 用户id | us_id |
|
邮件id | mail_id |
| |
会议申请—用户 | 会议申请id | meet_id |
|
用户id | us_id |
| |
申请人id | appop_id |
|
外键关联说明:
表2-7 外键关联说明
描述表名 | 外键引用表 | 外键字段名 | 关联表 | 表关系 | 说明 |
文件信息 | 会议申请 | 会议信息主键<fk> | 不是 | 多对一 | 一个会议信息可以有多个文件信息 |
会议申请 | 用户信息 | 用户主键<fk2> | 是 | 多对一 | 该表是用户信息表与会议室表多对多关系的关系表,每个关系就是一个会议申请 |
会议室 | 会议室主键<fk1> | 多对一 | |||
会议设备 | 会议室 | 会议室主键<fk1> | 是 | 多对一 | 该表室会议室与设备类型多对多的一个关系表,每一个关系代表一个设备 |
设备类型 | 类型主键<fk2> | 多对一 | |||
权限信息 | 角色 | 角色主键<fk> | 不是 | 多对多 | 一个角色可拥有多个权限,一个权限可以给多个角色。 |
邮件 | 用户信息 | 用户主键 | 是 | 多对多 | 一个用户可以发送多个邮件,一个邮件可以被多个用户接受 |
会议申请与会议室是多对一的关系,会议室和设备是一对多的关系,
系统需求中有些设备不属于任何现有会议室,这些设备不会象其他设备那样成组的与会议申请对应,而是具有单独的对应关系。由于从局部图中可以看出,会议申请和移动设备间的对应关系是多对多关系。
系统需求中,移动设备不属于任何会议室,这些设备不会像固定设备 那样成组的与会议申请相对应。会议室和会议申请是一对多的关系,会议室和设备间是一对多的关系,会议申请和设备是多对多关系。
复杂关系成因
从上面两种情况,会议室和会议申请的关系是指的是和移动设备和固定设备都有这种关系,而会议申请和会议设备的关系是指的移动设备的关系,一个会议申请多个移动设备,而移动设备能被多个会议申请。本来应将移动设备和移动设备分开,而为了减少冗余,将其合为一个表,从而减少开发麻烦。这就在不影响业务功能的情况下简化了一张表。
1.1 存储过程设计
存储过程是一组预先定义并编译好的SQL语句,可以接受参数、返回状态值和参数值,并可以嵌套调用。使用存储过程可以改变SQL语句的运行性能,提高其执行效率。存储过程还可用做一种安全机制,使用户通过它访问未授权的表或视图。
在本系统中可协助应用服务器完成日志记录功能,及当用户进行个中数据库CURD操作室记录相应信息到到日志表中。
举例:
create or replace procedure loginsert
(optype in string, optime in string ,userid in out int,tablename in string ,opflag out int )
1.2 is begin
insert into logtable values(power_seq.nextval,optime,optype,userid,tablename);
select power_seq.currval into opflagfrom dual;
end loginsert;触发器设计
触发器是一种特殊的存储过程,当表中的数据被修改时,由系统自动执行。使用触发器可以实施更为复杂的的数据完整性约束。
举例:
create or replace trigger autodel
after delete on room
for each row
declare
-- local variables here
begin
delete facility fwhere f.rid=:old.id;
end autodel;
1.3 Job设计(定时触发功能)
数据库系统提供了Job功能,该功能可以用来解决需要定期处理商业数据的问题。