admin 管理员组

文章数量: 1086019


2024年4月25日发(作者:做网站有什么关键词)

第四章 数据库设计

4.1 原理

数据库设计是指对于一个给定的应用环境,构造最优的数据库模式,建立数

据库及其应用系统,使之能够有效地存储数据。

数据库设计是一个软件项目成功的基石,但很多从业人员都认为,数据库设

计其实不那么重要,现实中的情景也相当雷同,开发人员的数量是数据库设计人

员的数倍。因为多数人使用数据库中的一部分,所以也会把数据库设计想的如此

简单,其实不然,数据库设计是值得深入研究的,因为其完全决定了系统的优化

程度。

完整的数据库设计一般包如下部分:

1.需求分析;

2.概念结构设计;

3.逻辑结构设计;

4.物理结构设计;

5.验证阶段;

6.运行与维护。

在讲解数据库设计之前,先大概的说说数据库系统设计的原则,其实,关于

数据库设计的原则,版本居多,不同的人根据不同的场景不同的需求不同的系统

去描述,可定会出现不一致,但万变不离其宗,所有数据库设计的原则无例外是

为了实现数据库的最优,从这个宗旨出发我们自己探讨出了以下几条关系数据库

设计的原则:

1.明白自己的系统为OLTP系统还是OLAP系统

不同的系统其侧重点是不一样的,OLTP系统最注重的是数据增删改查操作

的效率,而OLAP系统注重的是分析处理,所以不同的系统数据库设计也不一样;

2.降低对数据库功能的依赖

功能的实现,一般要求通过程序来实现,而不是大量的依赖数据库。

3.严格遵从数据库三范式

严格遵从数据库三范式,避免数据的冗余等问题产生;

4.尽量保证记录的唯一标识存在;

5.严格遵循概念模型到逻辑模型的转换规则;

6.星型模型、雪花模型的合理运用。

4.1.1 概念结构设计

早期的数据库设计,在需求分析阶段后,就直接进行逻辑结构设计,由于此

时既要考虑现实世界信息的联系与特征,又要满足特定的数据库系统的约束要

求,因而对于客观世界的描述受到一定的限制,同时,由于设计时要同时考虑多

方面的问题,也使设计工作变得十分复杂。1976年提出在逻辑结构

设计之前先设计一个概念模型,并提出了数据库设计的实体--联系方法

(Entity--Relationship Approach)。这种方法不包括深的理论,但提供了一个

简便、有效的方法,目前成为数据库设计中通用的工具。有许多商业软件支持

E-R模型,如PowerDesigner、ERwin。

概念模型E-R图主要是便于和需求人员进行交流沟通,它形式简单明了,可

以简单清晰的描述需求中的各种概念及他们之间的关系.

使用E-R模型来进行概念模型的设计通常分两步进行,首先是建立局部概念

模型,然后综合局部概念模型,成为全局概念模型。

E-R图设计

E-R图分为局部E-R图和全局E-R图。

E-R模型基本符号:

实体的表示:用长方形;

联系的表示:用菱形,如1:1、1:n (m:1)、(m:n);

属性的表示:用椭圆形。

确定实体与属性的原则:

1.能作为属性的尽量作为属性而不要划为实体;

2.作为属性的数据元素与实体之间的联系只能是1:n的联系;

3.作为属性的数据项不能再用其他属性加以描述,也不能与其他实体或属性

发生联系。

例如某公司员工信息的E-R图:

4.1.2 逻辑结构设计

所谓逻辑结构设计就是将基本E-R图转换为与选用DBMS产品所支持的数据

模型相符合的逻辑结构的过程。

逻辑结构设计的过程分为以下几点:

1.将概念结构转换为现有DBMS支持的关系、网状或层次模型中的某一种数

据模型;

2.从功能和性能要求上对转换的模型进行评价,看它是否满足用户要求;

3.对数据模型进行优化。

逻辑结构设计的原则:

1.一个实体型转换为一个关系模型,实体的属性就是关系的属性,实体的键

就是关系的键;

2.一个联系转换为一个关系模式,与该联系相连的每个实体型的键以及联系

的属性都转换为关系的属性。

关于逻辑结构设计时实体之间的关系,有四种情况,分别做一说明(注:图

片来自网络):

1.若联系为1:1,则相连的每个实体型的键均是该关系模式的侯选键。如

图:

2.若联系为1:n,则联系对应的关系模式的键取n端实体型的键:

3.若联系为m:n,则联系对应的联模式的键为参加联系的诸实体型的键的组

合,如图:

4.若实体与实体之间存在依赖关系,那么联系就是代表了两个实体之间的联

系,如图:

4.1.3 物理结构设计

根据特定数据库管理系统所提供的多种存储结构和存取方法等,依赖于具体

计算机结构的各项物理设计措施,对具体的应用任务选定最合适的物理存储结构

(包括文件类型、索引结构和数据的存放次序与位逻辑等)、存取方法和存取路径

等。这一步设计的结果就是所谓“物理数据库”。

4.2 ERwin应用说明

Erwin的全称是AllFusion ERwin Data Modeler,是CA公司 AllFusion品

牌下的建模套件之一,用于数据库建模。是关系数据库应用开发的优秀工具。

ERwin可以方便地构造实体和联系,表达实体间的各种约束关系,并根据模板创

建相应的存储过程、包、触发器、角色等,还可编写相应的PB扩展属性,如编

辑样式、显示风格、有效性验证规则等,同时可以实现将已建好的ER模型到数

据库物理设计的转换,即可在多种数据库服务器(如Oracle,Sql Server,mysql

等)上自动生成库结构,提高了数据库的开发效率。

4.2.1实体

Erwin中的实体有两种:独立实体和依赖实体。实体被指定作为独立实体,

或依赖实体,取决于其键的获得方式。

独立实体由方角盒来指定,独立实体不依赖于模型中任何其它实体来标识;

依赖实体被指定为圆角盒,依赖实体依存于模型中的其它实体,如图:

4.2.2 实体间的关系

实体间的三种关系:

1.标识关系(identifying relationship);

2.多对多关系(many- to- many relationship);

3.非标识关系(non-identifying relationship )。

标识关系是指把实体1中的主键作为实体2中的外键,且作为实体2的主键,

如图:

非标识关系是指把实体1中的主键作为实体2中的外键,但不作为实体2

的主键,如图:

4.2.3 Erwin建模

Erwin可以设计三种模型:logical model、physical model、

logical/physical model。如果只做文档,可以选择只建立logical model,如

果是做项目,需要同时使用logical model和physical model,physical model

是用于生成或者导出脚本的。

1. 建立新的数据模型

点击File/New弹出建模窗口如下,可根据具体情况做出相应选择(选的目标

数据库最好有驱动):

2.建立各个实体

方法一:点击实体图标,如图:

方法二:右击左边窗口中的entities,然后单击new也可以新建一个实体,

如图:

3.修改实体名称

方法一:单击实体名,按F2键可以对实体名称进行修改;

方法二:右键单击欲进行修改的实体,选择Entity Properties;

方法三:双击实体修改。

4.列的增删:

方法一:右键单击所选实体,选择Attributes,在弹出的Attributes窗口中

添加,删除或修改属性;

方法二:单击所选实体,按 tab键也可以进行添加,删除或修改操作。

5.创建约束、存储、触发器

主键:

右击所选实体,然后单击key groups,然后选择实体的主键,如图:

索引:

右击所选实体,选择Indexes…,如图:

存储过程:

单击实体右键Stored Procedures…,如图:

单击New键,在New Stored Procedure界面的Name输入存储过程名,按

OK键,在Code处输入代码,按OK键。如图:

触发器:

单击实体右键Triggers…,如图:

6.使用format preferences

如何将图1自动调整成图2效果?

图一

图二

选择Format,单击preferences,如图:

单击Layout Entire Diagram键选择是,如图:

4.2.4正向、反向工程

正向工程

通过正向工程能够快速方便生成DDL数据库定义语言。

选择Tools菜单,单击Forward Engineer,如图:

可以做相应的配置后单击preview,如图:

生成DDL数据库定义语言,保存成后缀为.ers的文件,如图:

反向工程

通过反向工程能把DDL转换成ERwin数据模型。

选择Tools菜单,单击见图:

单击Next,选择Script file,单击Browse..,选择.ers文件,单击Next,

如图:

4.2.5导入数据库

将视图切换到physical模型下,连接数据库:单击databasedatabase

connection,弹出下面窗口,进行数据库的连接。

链接完成后单击toolsforward engineerschema generate,将弹出下面

的窗口,单击generate,即可将物理模型导入数据库。

4.3 PowerDesigner应用说明

Power Designer 是Sybase公司的CASE工具集,使用它可以方便地对管理

信息系统进行分析设计,几乎包括了数据库模型设计的全过程。利用Power

Designer可以制作数据流程图、概念数据模型、物理数据模型,还可以为数据

仓库制作结构模型,也能对团队设计模型进行控制。他可以与许多流行的数据库

设计软件,例如PowerBuilder,Delphi,VB等相配合使缩短开发时间和使系统

设计更优化。

power designer是能进行数据库设计的强大的软件,是一款开发人员常用

的数据库建模工具。使用它可以分别从概念数据模型(Conceptual Data Model)

和物理数据模型(Physical Data Model)两个层次对数据库进行设计。在这里,

概念数据模型描述的是独立于数据库管理系统(DBMS)的实体定义和实体关系定

义;物理数据模型是在概念数据模型的基础上针对目标数据库管理系统的具体

化。

4.3.1配置数据库连接

1.打开powerdesigner,依次点击:database--connect,如图:

2.点击connect,打开对话窗口:

3.然后点击Configuer按钮,弹出数据源配置Configuer Data Connections

对话框:

4.把页签切换到第三个Connetion Profiles页签中,如果连接存在,选中

就行,如果不存在,点击add Data Source数据库图标进行新增,弹出Connection

Profile Definition对话框如下图;

此对话框中需要输入以下信息

Connection profile name: 输入数据库连接文件名,它会自动加上后缀

名.dcp;

Directory:数据库连接文件存放路径;可以任意;

Connetction type: 选择JDBC;

DBMS type : 数据库类型选择Oracle;

Server name: 服务器名称;也相当于对应PL/SQL登陆页面的数据库;

Database name: 数据库名字;

User name: 登陆数据库名字;

Password: 密码

JDBC Driver class: 驱动类;只要下拉框选择就行;

JDBC Driver Jar URL: 访问的服务器路径

JDBC connection files: 驱动包;需要指向或者其他驱动的

包的按钮路径;

全部设置如下图:

5.点击Test Connection 按钮进行连接测试;

测试连接是否成功;成功会弹出成功或者失败消息框,测试成功后。点击确

定按钮,返回数据源配置Configuer Data Connections对话框,列表中就会多

出一个.dcp文件,点击确定即可。

4.3.2导出数据库表

导出数据库表方法如下:

1.启动PowerDesigner

2.菜单:File->Reverse Engineer ->Database 出来New Physical Data

Model对话框,DBMS选择ORACLE Version 10g 选项,其他可以选择默认值:

点击“确定”按钮,弹出Database Reverse Engineering Options对话框:

3.然后在下拉框中选择我们之前建立的数据源文件,并再次输入数据库

User ID和password:

点击Connection即可连接至数据库,并得取所有的数据库对象,在此我们

选择所有的Table。

最后点击OK,大功告成!

4.3.3导入表到数据库

1.用Power Designer创建实例的时候,切记所有的表名、字段、对象名称

全部为大写,要不导入数据库会报错,如图:

2.如果Power Designer没有连接数据库,先连接,方法前面已有讲解,如

果已经连接了数据库,点击Database,在下拉框中点击Generate Database,如

图:

3.点击确定按钮,进入下一页,如图:

4.点击RUN按钮,运行完即可,如图:

4.4 数据库设计实例--选课系统

在信息时代网,我们所需求的任何知识几乎都可以从网上得到,但是,纸上

得来终觉浅,绝知此事要躬行,本节通过一个很常见的学生选课系统设计例子的

练习,来加深大家对数据库设计的理解。

4.4.1需求分析

数据库设计的第一个环节就是需求的分析,学习过软件工程就知道,所谓项

目开发,实质上就是实现需求,所以说一个确切的、复合实际的、可执行的、精

简的需求是项目开展的第一步。

本节的目的是让大家通过设计学生选课系统数据库,来实现对数据库设计的

深入理解,学生选课系统在各大学校已经完全普及,网上相关的实例不胜枚举,

此处就不做过多的分析说明,只需要掌握两件事:其一,本系统应该面向那些用

户,换句话说就是谁可以访问此系统;其二,用户访问此系统的目的是什么。搞

清楚此两点,接下来的事情就明了了。

4.4.2概念设计

概念设计是将需求转换为数据库表的第一步,通过简单的分析,可以确定本

系统有四个实体,具体如下:

1.学生表E-R图:

学生编号

学生姓名

2.班级表E-R图:

班级编号

3.课程表E-R图:

课程编号

4.老师表E-R图:

所属班级

性别

学生表

年龄

班级名称

班级表

专业

课程名称

课程表

任课老师

老师编号

老师表

老师姓名

5.学生表与班级表之间的局部E-R图(包含关系):

班级编号

班级表

专业

属于

班级名称

学生编号

学生表

学生姓名

年龄

6.学生表与课程表之间的关系E-R图:

性别

年龄

性别

所属班级

课程编号

分数

任课老师

课程表

成绩

课程名称

学生编号

学生表

性别

学生姓名

年龄

所属班级

4.4.3逻辑设计

概念模型转换为逻辑模型,是将抽象的 E-R图转换为可理解的逻辑结构的

过程。

概念模型转换为逻辑模型:

班级表(班级编号、班级名称、专业)主键:班级编号

学生表(学生编号、学生姓名、年龄、性别、班级编号)主键:学生编号

选课表(学生编号、课程编号、成绩)主键:学生编号、课程编号

课程表(课程编号、课程名称、老师编号)主键:课程编号

老师表(老师编号、老师姓名、年龄、性别)主键:老师编号

表结构说明:

表4-1 班级表结构

字段名 数据类型 长度 约束 描述

cid varchar2 15 主键 班级编号

cname varchar2 20 不为空 班级名称

cmajor varchar2 20 不为空 专业课程

表4-2 学生表结构

字段名 数据类型 长度 约束 描述

sid number 15 主键 学生编号

sname varchar2 10 不为空 学生姓名

ssex

sage

cid

varchar2

number

varchar2

字段名

sid

courceid

score

数据类型

number

number

number

字段名

courceid

courcename

tid

数据类型

number

varchar2

number

字段名

tid

tname

tage

tsex

数据类型

number

varchar2

number

varchar2

4 ‘男’or’女’

3

15 外键

表4-3 选课表结构

长度 约束

15 联合主键

15 联合主键

5 不为空

表4-4 课程表结构

长度 约束

15 主键

30 不为空

15 外键

表4-5 老师表结构

长度 约束

15 主键

20 不为空

3 不为空

4 ‘男’or’女’

性别

年龄

班级编号

描述

学生编号

课程编号

成绩

描述

课程名

课程名称

教师号

描述

老师编号

老师姓名

年龄

性别

4.4.4物理设计

物理设计,也就是关系转换为数据库表的过程,可以将模型直接导入数据库,

也可以在数据库中运行建表语句,建表语句如下:

1.班级表:

CREATE TABLE class

(

cid VARCHAR2(15) NOT NULL ,

cname VARCHAR2(20) NOT NULL ,

cmajor VARCHAR2(20) NOT NULL

);

CREATE UNIQUE INDEX XPKclass ON class

(cid );

ALTER TABLE class

ADD CONSTRAINT XPKclass PRIMARY KEY (cid);

2.课程表:

CREATE TABLE cource

(

courceid NUMBER(15) NOT NULL ,

courcename VARCHAR2(30) NULL ,

tid NUMBER(15) NOT NULL

);

CREATE UNIQUE INDEX XPKcource ON cource

(courceid );

ALTER TABLE cource

ADD CONSTRAINT XPKcource PRIMARY KEY (courceid);

3.学生表:

CREATE TABLE stu

(

sid NUMBER(15) NOT NULL ,

sname VARCHAR2(10) NOT NULL ,

ssex VARCHAR2(4) NULL ,

sage NUMBER(3) NULL ,

cid VARCHAR2(15) NOT NULL

);

CREATE UNIQUE INDEX XPKstu ON stu

(sid );

ALTER TABLE stu

ADD CONSTRAINT XPKstu PRIMARY KEY (sid);

4.教师表:

CREATE TABLE teacher

(

tid NUMBER(15) NOT NULL ,

tname VARCHAR2(20) NOT NULL ,

tsex VARCHAR2(4) NOT NULL ,

tage NUMBER(3) NOT NULL

);

CREATE UNIQUE INDEX XPKteacher ON teacher

(tid );

ALTER TABLE teacher

ADD CONSTRAINT XPKteacher PRIMARY KEY (tid);

5.选课表:

CREATE TABLE stu_cource

(

sid NUMBER(15) NOT NULL ,

courceid NUMBER(15) NOT NULL ,

score NUMBER(5) NULL

);

CREATE UNIQUE INDEX XPKstu_cource ON stu_cource

(sid ASC,courceid ASC);

ALTER TABLE stu_cource

ADD CONSTRAINT XPKstu_cource PRIMARY KEY (sid,courceid);

6.创建表与表之间的外键关系:

ALTER TABLE cource

ADD (CONSTRAINT R_2 FOREIGN KEY (tid) REFERENCES teacher(tid));

ALTER TABLE stu

ADD (CONSTRAINT R_1 FOREIGN KEY (cid) REFERENCES class(cid));


本文标签: 数据库 实体 设计 模型 系统