mysql学习5:数据库设计
mysql学习5:数据库设计
本文转载:https://blog.51cto.com/9291927/2087925;原创为天山老妖S
一、数据库设计简介
按照规范设计,将数据库的设计过程分为六个阶段:
A、系统需求分析阶段
B、概念结构设计阶段
C、逻辑结构设计阶段
D、物理结构设计阶段
E、数据库实施阶段
F、数据库运行与维护阶段
需求分析和概念结构设计独立于任何数据库管理系统。
二、系统需求分析
1、需求分析的任务
需求分析的任务:对现实世界要处理的对象进行详细的调查,通过对原系统的了解,收集支持新系统的基础数据并对其进行处理,在此基础上确定新系统的功能。
A、调查分析用户活动
B、收集和分析需求数据,确定系统边界信息需求,处理需求,安全性和完整性需求
C、编写系统分析报告
2、需求分析的方法
需求分析有两种方法:自顶向下、自底向上
A、自顶向下
自顶向下方法从最上层的系统组织机构入手,采用逐层分解的方式分析系统。
用数据流图和数据字典描述系统
数据流图:描述输入数据到输出数据的变换过程
数据流:由一组固定成分的数据组成,代表数据的流动方向
处理:描述了输入数据到输出数据的变换
文件:用于存储数据
源或宿:存在于系统之外的人员或组织,表示系统输入数据的来源和输出数据的去向
B、自底向上
3、实例
教学管理系统
基本需求:
某学校设计学校教学管理系统,学生实体包括学号、姓名、性别、生日、民族、籍贯、简历、入学日期,每名学生选择一个主修专业,专业包括专业编号、名称、类别,一个专业属于一个学院,一个学院可以有多个专业。学院信息要存储学院号、学院名、院长。教学管理要管理课程表、学生成绩表。课程包括课程号、课程名、学分,每门课程由一个学院开设。学生选修的每门课程获得一个成绩。
三、概念结构设计
1、概念结构设计简介
概念结构设计的目标是设计数据库的E-R模型图,确认需求信息的正确和完整。具体来说就是从需求分析中找到实体,确认实体的属性、确认实体的关系,画出ER图。
2、概念结构设计的步骤
第一步,数据抽象与局部E-R模型设计
A、数据抽象
在多层数据流中选择一个适当层次作为设计E-R图的出发点。
确定每个局部应用包含哪些实体,实体包含哪些属性,实体之间的联系
划分实体和属性的方法
分类:将一组具有某些共同特性和行为的对象抽象为一个实体。
聚合:将对象类型的组成成分抽象为属性。
B、局部E-R模型设计
局部E-R模型设计的原则是属性必须是不可分的数据项,不能再由放弃其他属性组成;属性不能与其他实体具有联系,联系只能发生在实体之间。
为简化E-R图,凡是能作为属性对待的,尽量作为属性。
第二步,全局E-R模型设计
集成各局部E-R模型,形成全局模型。视图集成的方法有两种:
A、多元集成法:一次性将多个局部E-R图合并为一个全局E-R图。
B、二元集成法:首先集成两个重要的局部E-R图,然后用累加的方法逐步将一个新的E-R图集成进来。
合并:
合并局部E-R图,消除冲突,初步生成E-R图。合并的关键是合理消除各局部E-R图的冲突。
冲突分类如下:
优化:
消除初步E-R图中不必要的冗余,生成基本的E-R图。
冗余数据:可由基本的数据导出的数据。
冗余联系:可由基本的联系导出的联系。
3、实例
教学管理系统的E-R图
实体:学生、专业、学院、课程
实体表要记录的属性:
学生(学号、姓名、性别、生日、籍贯、民族、简历、入学日期)
专业(专业号、专业名称、类别)
学院(学院号、学院名称、院长)
课程(课程号、课程名称、学分)
教学管理ER图:
四、逻辑结构设计
1、逻辑结构设计简介
逻辑结构设计的任务是将概念结构设计阶段完成的实体模型转换成特定的DBMS所支持的数据模型的过程。逻辑结构设计的目的是将E-R图中的实体、属性和联系转换成为关系模式。
2、初始关系模型设计
(1)实体间关系转换遵循的原则:
一个实体转换为一个关系模式,实体的属性就是关系的属性,实体的键就是关系的键。
一个联系转换为一个关系模式,与该联系相连的各实体的键以及联系的属性均转换为该关系的属性。
联系关系的键有三种情况:
如果联系为1:1,则每个实体的键都是关系的候选键
如果联系为1:n,zen端实体的见识关系的键
如果联系为n:m,则各实体的键的组合是关系的键
特殊情况:多元联系
多元联系在转换为关系模式时,与该多元联系相连的各实体的主键及联系本身的属性均转换为关系的属性,转换后所得到的的关系的主键为各实体键的组合
(2)实体间关系的转换规则:
A、一个1:1关系可以转换为一个独立的关系模式,也可以与任意一端所对应的关系模式合并。
原实体对应关系模式分别为:
班级(班号,专业,人数)
班长(学号,姓名,专长)
将关系“管理”合并到实体“班级”对应的模式后为:
班级(班号,专业,人数,班长学号)
班长(学号,姓名,专长)
关系“管理”也可以合并到实体“班长”对应的模式,将关系“管理”合并到实体“班级”对应的模式后为:
班级(班号,专业,人数)
班长(学号,姓名,专长,班号)
B、一个1:n关系可以转换为一个独立的关系模式,也可以与n端所对应的关系模式合并。
实体对应的关系模式
系(系号,系名,系主任,电话)
教师(教师号,姓名,专业,职称,性别,年龄)
关系对应的关系模式
管理(教师号,系号)
合并到实体“教师”后(只能合并到“多”的一端的关系模型):
教师(教师号,姓名,专业,职称,性别,年龄,系号)
C、一个m:n关系转换为一个关系模式。转换的方法为:与该关系相连的各实体的码以及关系本身的属性均转换为关系的属性,新关系的码为两个相连实体码的组合。
关系只能转换为独立模式,模式的属性由关系本身的属性及两个实体的键构成;主键由两端实体的键组合而成。
课程(课程号,课程名,学时,类别) 实体表
学生(学号,姓名,性别,专业,出生日期,照片) 实体表
选修(学号,课程号,分数) 关系表
D、三个或三个以上实体间的多元关系转换为一个关系模式。
关系的属性:与该多元关系相连的各实体的码以及关系本身的属性
关系的码:各实体码的组合
“讲授”关系是一个三元关系,可以转换为如下关系模式,其中课程号、职工号和书号为关系的组合码:
讲授(课程号,职工号,书号)
3、关系模式规范化
应用数据库设计的范式理论对初始关系模型进行优化。数据库设计的三大范式如下:
第一范式 每一个分类必须是一个不可分的数据项。属性不可再分,确保每列的原子性。
第二范式 要求每个表只描述一件事情,每条记录有唯一标识列。
第三范式 数据库表中不包含已在其它表中已包含的非主关键字信息。
关系模式的规范化过程如下:
A、确定范式级别
考察关系模式的函数依赖关系,确定范式等级。
B、实施规范化处理
利用规范化方法和理论将关系模式规范化。
C、模式改进
合并:
将用于关联查询的具有相同主键的各表合并可提高查询效率
分解:
水平分解,将关系的元组分为若干子集,提高查询效率;垂直分解,把关系中经常一起使用的属性分解出来,形成一个子关系,提高执行效率。分解时要保持无损连接和函数依赖。
4、实例
教学管理系统
由ER模型转化为的关系模型:
学生(学号、姓名、性别、生日、籍贯、民族、入学日期、专业号)实体表
专业(专业号、专业名称、类别、学院号)实体表
学院(学院号、学院名称、院长)实体表
课程(课程号、课程名称、学分、学院号)实体表
成绩表(学号、课程号、成绩)关系表
在转换为关系模型时,一对多的联系都在相应的多方实体的关系中增加一个外键。
需求的增加:
如果教学管理系统还要管理教师教学安排,教师包括编号、姓名、年龄、职称,一个教师只能属于一个学院,一名教师可以上若干门课程,一门课程可以有多名老师来上,每个教师所上的每门课都有一个课堂号和课时数。
教师实体的ER图:
教学管理系统ER图:
关系表 多对多
成绩表 (学号,课程号,成绩,时间,地点)
五、物理结构设计
1、物理结构设计简介
物理结构设计:对于给定的逻辑数据模型,选取一个最适合应用环境的物理结构。数据库的物理结构设计分为两步:
A、确定物理结构:存取方法和存储结构
B、评价物理结构:评价重点是时间和空间效率
根据具体的数据库管理系统所提供的多种存储结构和存取方法等依赖于具体计算机结构的各项物理设计措施,对具体的应用任务选定最合适的物理存储结构(数据类型 索引 主键)。
2、确定物理结构
(1)存储结构的设计
物理结构中,数据的基本存取单位是存储记录。
某一类型的所有存储记录的集合称为文件。
确定数据库存储结构时要综合考虑存取时间、存储空间利用率和维护代价三方面的因素。例如消除一切冗余数据虽然能够节约存储空间,但往往会导致检索代价的增加,因此必须进行权衡,选择一个折中方案。
(2)数据存取路径的设计
在关系数据库中,选择存取路径主要是指确定如何建立索引。例如,应把哪些域作为次码建立次索引,建立单码索引还是组合索引,建立多少个为合适,是否建立聚集索引等。
(3)数据存放位置的设计
为了提高性能,可将数据的易变部分、稳定部分、经常存取部分和存储频率较低部分分开存放。
(4)系统配置的设计
DBMS产品一般都提供了一些存储分配参数,供设计人员和DBA对数据库进行物理优化。初始情况下,系统都为这些变量赋予了合理的缺省值,但是这些值不一定适合每一种应用环境,在进行物理设计时,需要重新对这些变量赋值以改善系统的性能。
3、评价物理结构
物理结构设计过程中需要对时间效率、空间效率、维护代价和各种用户要求进行权衡,其结果可以产生多种方案,数据库设计人员必须对方案进行细致的评价,从中选择一个较优的方案作为数据库的物理结构。
评价物理数据库的方法完全依赖于所选用的DBMS,主要是从定量估算各种方案的存储空间、存取时间和维护代价入手,对估算结果进行权衡、比较,选择出一个较优的合理的物理结构。
4、实例
教学管理系统
表1-1 学院
表1-2 专业
表1-3 学生
表1-4 课程
表1-5 成绩单
六、数据库实施
1、数据库实施的过程
数据库实施:指根据逻辑设计和物理设计的结果,在计算机上建立起实际的数据库结构、装入数据、进行测试和试运行的过程。
2、实例
学生表:
课程表:
专业表:
学院表:
成绩表:
七、数据库运行与维护
数据库运行与维护的主要任务包括:
A、维护数据库的安全性与完整性
B、监测并改善数据库性能
C、重新组织和构造数据库
只有数据库系统在运行,就需要不断地进行修改、调整和维护。
mysql学习5:数据库设计的更多相关文章
- mysql学习笔记--数据库设计
一.数据库基本概念 1. 关系:两个表的公共字段 2. 行:也称记录,也称实体 3. 列:也称字段,也称属性 4. 数据冗余:相同的数据存在不同的地方. 注意:冗余只能减少,不能杜绝. 减少冗余,只能 ...
- MySQL学习笔记-数据库文件
数据库文件 MySQL主要文件类型有如下几种 参数文件:my.cnf--MySQL实例启动的时候在哪里可以找到数据库文件,并且指定某些初始化参数,这些参数定义了某种内存结构的大小等设置,还介绍了参数类 ...
- MySQL学习笔记-数据库内存
数据库内存 InnoDB存储引擎内存由以下几个部分组成:缓冲池(buffer pool).重做日志缓冲池(redo log buffer)以及额外的内存池(additional memory pool ...
- MySQL学习笔记-数据库后台线程
数据库后台线程 默认情况下讲述的InnoDB存储引擎,以后不再重复声明.后台线程有7个--4个IO thread,1个master thread,1个锁监控线程,1个错误监控线程.IO thread的 ...
- MySQL学习——操作数据库
MySQL学习——操作数据库 摘要:本文主要学习了使用DDL语句操作数据库的方法. 创建数据库 语法 create database [if not exists] 数据库名 [default] ch ...
- MySQL学习——查看数据库信息
MySQL学习——查看数据库信息 摘要:本文主要学习了查看数据库信息的方法. 查询指定表的索引 语法 show index from 表名; 示例 mysql> show index from ...
- MySQL 约束和数据库设计
1.MySQL 约束: 1.约束的概念: 约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性.唯一性. MySQL中,常用的几种约束: 约束类型: 非空 主键 唯一 外键 默认值 ...
- 使用MySQL Workbench进行数据库设计——MySQL Workbench用法总结
转载请注明出处:http://blog.csdn.net/dongdong9223/article/details/48318877 本文出自[我是干勾鱼的博客] 1 简单介绍 MySQL Workb ...
- SQL SERVER学习2——数据库设计
数据库设计是数据库知识中比较重要的部分,我们需要了解数据库设计的基本步骤,E-R图的画法. 数据库设计的基本概述 检验一个数据库设计好坏的标准就是,看他是否能够方便的执行各种数据检索和处理操作,并且有 ...
- MySql学习(五) —— 数据库优化理论篇(一)
一.数据库管理系统 数据库管理系统(Database Management System, DBMS) 衡量是否是数据库的标准: ACID:是指在数据库管理系统(DBMS)中事务所具有的四个特性: 1 ...
随机推荐
- 2018-2019-2 20165312《网络攻防技术》Exp3 免杀原理与实践
2018-2019-2 20165312<网络攻防技术>Exp3 免杀原理与实践 课上知识点总结 1.恶意软件检测机制 基于特征码的检测(需要定期更新病毒库) 启发式恶意软件检测(实时监控 ...
- docker swarm 搭建与服务更新
一,docker swarm 是什么 Docker Swarm.Docker Machine与Docker Compose号称Docker三剑客Docker Swarm 和 Docker Compos ...
- C#学习-图解教程(2):访问修饰符(其中两种)
学习内容:C#:学习书籍:图解教程(中文第四版). 目录:第四章 类的基本概念 -----> 4.8 访问修饰符 访问修饰符 从类的内部,任何函数成员都可以使用成员的名称访问类中任意的其他成员. ...
- JDK最新版 Jmeter最新版
http://www.oracle.com/technetwork/java/javase/downloads/jdk10-downloads-4416644.html http://jmeter.a ...
- es6 实现数组的操作
1.实现数组的去重: 1.1.方法一: let arr = [{id: 1, name: 'aa'}, {id: 2, name: 'bb'}, {id: 3, name: 'cc'}, {id: 4 ...
- java 日志脱敏框架 sensitive,优雅的打印脱敏日志
问题 为了保证用户的信息安全,敏感信息需要脱敏. 项目开发过程中,每次处理敏感信息的日志问题感觉很麻烦,大部分都是用工具类单独处理,不利于以后统一管理,很不优雅. 于是,就写了一个基于 java 注解 ...
- H5转图片支持保存
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- xpath 选取指定文本内容可能是多种情况下的语法
url_list = select.xpath("//ul/li/a[contains(text(),'新闻中心' )]/../../li/a/@href | //ul/li/a[conta ...
- 创建只读账号oracle
1.创建用户,指定哪个表空间create user test2 identified by "123" default tablespace BDCDJ_XC temporary ...
- java 启动报错 Unsupported major.minor version 52.
这是java 版本问题,主要是版本不统一,你看看你开发工具用的java版本(编译的java版本和开发的java版本)是否统一,如果没有统一就会报这个错误.