数据库设计.docx
《数据库设计.docx》由会员分享,可在线阅读,更多相关《数据库设计.docx(18页珍藏版)》请在冰豆网上搜索。
![数据库设计.docx](https://file1.bdocx.com/fileroot1/2022-12/12/0c7d1a01-97f1-4034-bd84-55943e621769/0c7d1a01-97f1-4034-bd84-55943e6217691.gif)
数据库设计
图书管理系统
数据库设计报告
文件状态:
[√]草稿
[]正式发布
[]正在修改
文件标识:
bnuep-librarymanagement-SD-DATABASE
当前版本:
1.0
作者:
刘焕青0501011034(插班生)
完成日期:
2006-6-10
版本历史
版本/状态
作者
参与者
起止日期
备注
V1.0
刘焕青
--2006.6.10
目录
0.文档介绍4
0.1文档目的4
0.2参考文献4
0.3术语与缩写解释4
1.数据库环境说明5
2.数据库的命名规则5
3.逻辑设计5
4.物理设计6
4.0表汇总7
4.1表1:
出版社8
4.2表2:
书库8
4.3表3:
图书9
4.4表4:
读者9
4.5表5:
借还书10
4.6表6:
单位10
5.安全性设计11
5.1防止用户直接操作数据库的方法11
5.2用户帐号密码的加密方法12
5.3角色与权限12
6.优化12
7.数据库管理与维护说明13
8.代码部分………………………………………………………………………………………14
0.文档介绍
0.1文档目的
本文档是关于图书管理系统数据库的开发和应用方法,主旨在推动软件工程的规范化,使设计人员遵循统一的设计书写规范,节省制作文档的时间,降低系统实现的风险,做到系统设计资料的规范性与全面性,以利于系统的实现、测试、维护、升级等。
0.2参考文献
《数据库系统概论》王珊萨师煊主编高等教育出版社
《PowerDesigner系统分析与建模》赵韶平、罗海燕、李志等编清华大学出版社
《SQL实用教程》第二版RobertSheldon著,黄开枝等译
《oracle实用教程》郑阿奇主编电子工业出版社
0.3术语与缩写解释
缩写、术语
解释
SPP
精简并行过程,SimplifiedParallelProcess
SD
系统设计,SystemDesign
SDLC
系统开发生命周期SystemDevelopLifeCycle
CDM
概念数据模型ConceptDataModel
PDM
物理数据模型PhysicalDataModel
视图
在基表或其他视图之上建立的一张虚表,它具有物理表的许多性质,在数据处理和授权上很有用。
角色
数据库中享有某些特权操作的权限集合,角色的权限通过授权来实现,可以把角色授权给用户。
存储过程
存储过程是一种特殊的功用模块,它在数据库上执行,可以被应用程序调用。
触发器
触发器是通过某一事件的产生而触发某一个相应的动作,它是隐式执行的,但过多的使用触发器反而会是系统的效率降低,因此,凡是能用存储过程代替触发器的一律用存储过程实现。
包
包是变量、存储过程、函数等的集合,具有某种实现功能,预先编译并运行在服务器上,pl/sql提供许多功能包,用户也可以自己定义实现需要功能的包。
1.数据库环境说明
提示:
(1)说明所采用的数据库系统,设计工具,编程工具等
考虑该系统的定位与现有技术力量,决定采用oracle9i作为系统的后台数据库开发环境。
采用PowerDesigner进行数据库模型设计,使用pl/sqlDeveloper进行包、存储过程、触发器等的开发。
(2)详细配置
2.数据库的命名规则
3.逻辑设计
提示:
数据库设计人员根据需求文档,创建与数据库相关的那部分实体关系图(ERD)。
如果采用面向对象方法(OOAD),这里实体相当于类(class)。
4.物理设计
提示:
(1)主要是设计表结构。
一般地,实体对应于表,实体的属性对应于表的列,实体之间的关系成为表的约束。
逻辑设计中的实体大部分可以转换成物理设计中的表,但是它们并不一定是一一对应的。
(2)对表结构进行规范化处理(第三范式)。
4.0表汇总
表名
功能说明
出版社
存储出版社的信息
书库
存储各分类书库的信息
图书
存储各类图书的相关信息
读者
存储读者的相关信息
借还书
存储读者借还书的日期以及超期的罚金
单位
存储各单位或者是院系的相关信息
表名
PUBLISH
列名
数据类型(精度范围)
空/非空
约束条件
PUB_ID
Varchar2(10)
Notnull
Primarykey
PUB_NAME
vVarchar2(20)
Notnull
PUB_ADDRESS
Varchar2(40)
PUB_MAN
Varchar2(10)
PUB_TEL
Varchar2(15)
4.1表1:
出版社
4.2表2:
书库
表名
LIBRARY
列名
数据类型(精度范围)
空/非空
约束条件
LIBRARY_NO
Char(20)
Notnull
Primarykey
LIBRARY_ADDRESS
Varchar2(40)
4.3表3:
图书
表名
BOOK
列名
数据类型(精度范围)
空/非空
约束条件
BOOK_NO
Char(10)
Notnull
Primarykey
LIBRARY_NO
Char(20)
Notnull
PUB_ID
Varchar2(10)
Notnull
BOOK_NAME
Varchar2(20)
Notmull
BOOK_PRICE
Number(6,2)
BOOK_AUTHOR
Varchar2(60)
BOOK_DATE
Date
BOOK_ID
Char
(1)
4.4表4:
读者
表名
READER
列名
数据类型(精度范围)
空/非空
约束条件
READER_NO
Char(8)
Notnull
primary
UNIT_NO
Varchar2(10)
READER_NAME
Varchar2(50)
Notnull
READER_ID
Varchar2(20)
Notnull
READER_PHONE
Varchar2(18)
READER_ADDRESS
Varchar2(50)
READER_EMAIL
Varchar2(50)
4.5表5:
借还书
表名
RETURN
列名
数据类型(精度范围)
空/非空
约束条件
BORROW_DATE
Date
Notnull
BOOK_NO
Char(10)
Notnull
Foreignkey
READER_NO
Char(8)
Notnull
Foreignkey
RETURN_DATE
Date
RETURN_ID
Char
(1)
DELAY_DATE
Integer
FINE
Number(4,1)
4.6表6:
单位
表名
UNIT
列名
数据类型(精度范围)
空/非空
约束条件
UNIT_NO
Varchar2(10)
Notnull
Primarykey
UNIT_ADDRESS
Varchar2(50)
UNIT_PHONE
Varchar(18)
补充说明
5.安全性设计
。
5.1防止用户直接操作数据库的方法
提示:
用户只能用帐号登陆到应用软件,通过应用软件访问数据库,而没有其它途径操作数据库。
1.用户标识和鉴别:
是系统提供的最外层的安全保护措施,其方法是有系统提供一定的方式让用户标识自己的名字或身份,用户只能用帐号登陆到应用软件,通过应用软件访问数据库,而没有其它途径操作数据库。
每次用户要求进入系统时,由系统进行核对,oracle允许用户重复标识三次,如果三次都未通过,系统自动退出并锁定用户,只有通过鉴定后才提供使用权。
2.存取控制:
存取控制机制主要包括两部分
1)定义用户权限:
用户权限是指不同的用户对于不同的数据对象允许执行的操作权限,这些定义经过编译后存放在数据字典中,称为安全规则或授权规则。
2)合法权限检查:
oracle支持三个级别的安全性,表级、行级和列级。
每当用户发出存取数据库的操作请求,DBMS查找数据字典,根据安全规则进行合法权限检查,若用户的操作请求超出了定义的饿权限,系统将拒绝执行此操作。
3.审计技术:
在oracle中,审计分为用户级和系统级审计。
系统级审计只能由DBA设置,用以监测成功或失败的登录要求、监测GRANT和REVOKE操作以及其他数据库级权限下的操作。
4.视图机制:
进行存取权限控制时可以为不同的用户定义不同的视图,把数据对象限制在一定的范围内,通过视图机制把要保密的数据对无权存取的用户隐藏起来,从而自动对数据提供一定程度的安全保护。
5.2用户帐号密码的加密方法
1.密码加密处理:
采用oracleDBMS系统默认的加密处理,确保在任何地方都不会出现密码的明文。
2.用户资源文件profile的应用:
在给每个用户进行资源限制时,同时建立系统口令校验函数verify_function,允许pl/sql的口令校检脚本作为CREATEPROFILE语句的参数。
用户在登录系统时,DBMS都会对用户和密码进行校检。
5.3角色与权限
角色
可以访问的表与列
操作权限
数据库管理员
DBA
Role_admin
图书管理员
Selectanytable
查询任意表
Insertanytable
向任意表插入数据
Updateanytable
更新任意表
Role_operator
操作员
Selectanytable
查询任意表
Role_reader
SELECTONBOOK
查询图书信息
6.优化
分析并优化数据库的“时-空”效率,尽可能地“提高处理速度”并且“降低数据占用空间”。
(1)分析“时-空”效率的瓶颈,找出优化对象(目标),并确定优先级。
(2)当优化对象(目标)之间存在对抗时,给出折衷方案。
(3)给出优化的具体措施,例如优化数据库环境参数,对表格进行反规范化处理等。
优先级
优化对象(目标)
措施
1
SGA_MAX_SIZE
根据系统的硬件配置,适当配置系统全局区的内存,让系统有足够的内存支持系统运行。
2
SHARED_POOL_SIZE
根据使用情况的统计数据,提高库缓冲区、数据字典缓冲区的命中率,共享内存池的预留区域可介于SHARED_POOL_SIZE的5%~10%之间。
3
DB_CACHE_SIZE
调整数据库缓冲区的命中率,如果命中率低于70%~80%之间,需增加DB_CACHE_SIZE的内存。
但是为数据库缓冲区分配过多的内存,可能在某些系统操作中导致系统的换页和交换,反而适得其反。
4
LOG_BUFFER
为重做日志分配的缓冲区入口值value如果不为零,即需要将LOG_BUFFER的值增加5%~10%。
5
FREELISTS
应该设置为峰值时刻同时对表进行操作的并发用户数量
6
FREEGROUP
应该设置为服务器的数量
7
PCTFREE、PCTUSED
设置撤出空闲列表和重新返回空闲列表的参数,根据数据块和行所占空间的平均值,创建表时适当设置参数的值,以避免以后对表操作是发生的行链接或行转移。
8
SQL语句
可以使用EXPLAINPLAN命令对表的操作执行计划进行跟踪,应尽量排除不必要的大表全表扫描。
对表的全表扫描可以增加parallel提示,并行操作可以提高运行效率。
当表中存在索引时,虽然在某些方面具有可靠的效率,但在插入时可能会消耗系统资源,如果允许,建议先删除索引,再插入数据,然后再建立索引``````
7.数据库管理与维护说明
在数据库的运行阶段,对数据库经常性的管理和维护工作主要是有DBA完成的,主要的管理和维护包括:
1.数据库的转储和恢复
DBA要针对不同的应用要求制定不同的转储计划,以保证发生故障能尽快将数据库恢复到某种一致的状态,并尽可能减少对数据库的破坏
2.数据库的安全性、完整性控制
在数据库运行过程中,由于应用环境的变化,比如数据的机密性,用户的权限都会改变,所以DBA应该根据实际情况修改安全性控制,同样,数据库的完整性约束条件也会变化,也需要DBA不断修正,一满足用户要求。
3.数据库性能的监测、分析和改造
目前有些DBMS产品,例如oracle,提供了监测系统性能参数的工具,DBA可以利用这些工具方便地得到系统一系列的性能参数的值,DBA根据分析数据的统计情况,判断当前系统运行状况是否最佳,应当做那些改进。
4.数据库的重组织与重构造
数据库运行一段时间后,由于记录不断增、删、改,会使数据库的物理存储情况变坏,降低了数据的存取效率,数据库性能下降,这时DBA就要对数据库进行重组织,或部分重组织,DBMS如oracle都有提供数据重组织用的实用程序。
在重组织的过程中,按原设计要求重新安排存储位置、回收垃圾、减少指针链等,提高系统性能。
数据库的重组织并不修改原设计的逻辑和物理结构,而数据库的重构造则不同,它是指部分修改数据库的模式和内模式。
由于数据库应用环境发生变化,增加了新的应用或新的实体,取消了某些应用,有的实体与实体间的联系也发生了变化等,原有的数据库设计不能满足新的需求就必须调整数据库的模式和内模式。
8.代码部分:
(使用oracle实现)
/*==============================================================*/
/*Table:
PUBLISH*/
/*==============================================================*/
createtablePUBLISH(
PUB_IDVARCHAR2(10)notnull,
PUB_NAMEVARCHAR2(20),
PUB_ADDRESSVARCHAR2(40),
PUB_MANVARCHAR2(10),
PUB_TELVARCHAR2(15),
constraintPK_PUBLISHprimarykey(PUB_ID)
);
/*==============================================================*/
/*Index:
PUBLISH_PK*/
/*==============================================================*/
createuniqueindexPUBLISH_PKonPUBLISH(
PUB_IDASC
);
/*==============================================================*/
/*Table:
LIBRARY*/
/*==============================================================*/
createtableLIBRARY(
LIBRARY_NOCHAR(20)notnull,
LIBRARY_ADDRESSVARCHAR2(40),
constraintPK_LIBRARYprimarykey(LIBRARY_NO)
);
commentontableLIBRARYis
'';
/*==============================================================*/
/*Table:
BOOK*/
/*==============================================================*/
createtableBOOK(
BOOK_NOCHAR(10)notnull,
LIBRARY_NOCHAR(20),
PUB_IDVARCHAR2(10),
BOOK_NAMEVARCHAR2(20),
BOOK_PRICENUMBER(6,2),
BOOK_AUTHORVARCHAR2(60),
BOOK_DATEDATE,
BOOK_IDCHAR
(1),
constraintPK_BOOKprimarykey(BOOK_NO)
);
/*==============================================================*/
/*Index:
"Relationship_5_FK"*/
/*==============================================================*/
createindex"Relationship_5_FK"onBOOK(
);
altertableBOOK
addconstraint"LIBRARY_NO=LIBRARY_NO"foreignkey(LIBRARY_NO)
referencesLIBRARY(LIBRARY_NO);
altertableBOOK
addconstraintFK_BOOK_REFERENCE_PUBLISHforeignkey(PUB_ID)
referencesPUBLISH(PUB_ID);
/*==============================================================*/
/*Table:
READER*/
/*==============================================================*/
createtableREADER(
READER_NOCHAR(8)notnull,
UNIT_NOVARCHAR2(10),
READER_NAMEVARCHAR2(50),
READER_IDVARCHAR2(20),
READER_PHONEVARCHAR2(18),
READER_ADDRESSVARCHAR2(50),
READER_EMAILVARCHAR2(50),
constraintPK_READERprimarykey(READER_NO)
);
altertableREADER
addconstraint"UNIT_NO=UNIT_NO"foreignkey(UNIT_NO)
referencesUNIT(UNIT_NO);
*==============================================================*/
/*Table:
UNIT*/
/*==============================================================*/
createtableUNIT(
UNIT_NOVARCHAR2(10)notnull,
UNIT_ADDRESSVARCHAR2(50),
UNIT_PHONEVARCHAR2(18),
constraintPK_UNITprimarykey(UNIT_NO)
);
/*==============================================================*/
/*Table:
RETURN*/
/*==============================================================*/
createtableRETURN(
BORROW_DATEDATE,
BOOK_NOCHAR(10),
READER_NOCHAR(8),
RETURN_DATEDATE,
RETURN_IDCHAR
(1),
DELAY_DATEINTEGER,
FINENUMBER(4,1)
);
altertableRETURN
addconstraint"BOOK_NO=BOOK_NO"foreignkey(BOOK_NO)
referencesBOOK(BOOK_NO);
altertableRETURN
addconstraint"READER_NO=READER_NO"foreignkey(READER_NO)
referencesREADER(READER_NO);
/*==============================================================*/
/*Table:
RETURN*/
/*==============================================================*/
createtableRETURN(
BORROW_DATEDATE,
BOOK_NOCHAR(10),
READER_NOCHAR(8),
RETURN_DATEDATE,
RETURN_IDCHAR
(1),
DELAY_DATEINTEGER,
FINENUMBER(4,1)
);
altertableRETURN
addconstraint"BOOK_NO=BOOK_NO"foreignkey(BOOK_NO)
referencesBOOK(BOOK_NO);
altertableRETURN
addconstraint"READER_NO=READER_NO"foreignkey(READER_NO)
referencesREADER(READER_NO);