为什么需要规范的数据库设计?

什么是数据库设计?

数据库设计就是将数据库中的数据实体及这些数据实体之间的关系,进行规划和结构化的过程.

数据库设计非常重要!

数据库中创建的数据结构的种类,以及在数据实体之间建立的复杂关系是决定数据库系统效率的重要因素

良好的数据库设计:

  1. 效率高
  2. 便于进一步扩展
  3. 可以使应用程序的开发变得更容易

设计数据库的步骤

在需求分析阶段,设计数据库的一般步骤如下:

1.收集信息

2.标识实体

3.标识每个实体的属性

4.标识实体之间的关系

收集信息

创建数据库之前,必须充分理解数据库需要完成的任务和功能

标识实体

在收集需求信息后,必须标识数据库要管理的关键对象或实体

标识每个实体需要存储的详细信息

将数据库中的主要实体标识为表的候选实体以后,就要标识每个实体存储的详细信息

标识实体之间的关系

能够关联数据库中各个项目的相关信息

概要设计-绘制E-R图

实体-关系模型

  1. 实体--------是指现实世界中具有区分其他事物的特征或属性并与其他事物有联系的事物

    2. 属性--------可以理解为实体的特征

    3. 联系--------联系时两个或多个实体之间的关联关系

    实体用矩形表示,一般是名词;

    属性用椭圆表示,一般也是名词;

    联系用菱形表示,一般是动词;

  1. 映射基数--------映射基数表示通过联系与该实体关联的其他实体的个数;
  1. 一对一: X中的一个实体最多与Y中的一个实体关联,并且Y重的一个实体最多与X中的一个实体关联
  2. 一对多: X中的一个实体可以与Y中任意数量的实体关联,Y中的一个实体最多与X中的一个实体关联
  3. 多对一: X中的一个实体最多与Y中的一个实体关联,Y中的一个实体可以与X中的任意数量的实体关联
  4. 多对多: X中的一个实体可以与Y中的任意数量的实体关联
  5. 实体关系图

组成:  1.矩形表示实体集

2.椭圆形表示属性

3.菱形表示联系集

4.直线用来连接属性和实体集,也用来连接实体集和联系集

关系数据库模式

用二维表的形式表示实体和实体间联系的数据模型称为关系模型.关系数据库模式是对关系数据库结构的描述.

表示形式:

R(U) 或者 R(A,B)

R表示关系名,U表示属性集合,A,B代表U中的属性

将E-R图转换为关系模式的步骤如下:

  1. 把每个实体都转化为关系模式R(A,B)形式
  2. 建立实体间联系的转换

实体间的联系分为一对一,一对多,多对多三种,当两个实体各自转化为关系模式后,实体间联系的转换如下:

  1. 一对一的转换:把任意实体的主键放到另一个实体的关系模式中
  2. 一对多的转换:把联系数量为1的实体的主键放到联系数量为N的实体关系模式中
  3. 多对多的转换:把两个实体中的主键和联系的属性放到另一个关系模式中,注意多生成一个关系模式.

逻辑设计-绘制数据库模型图

绘制数据库模型图的步骤

  1. 新建数据库模型图
  2. 添加实体
  3. 添加数据列及相应的属性
  4. 添加实体之间的映射关系

将E-R图转换为数据库模型的步骤如下:

  1. 将E-R图中各实体转化为对应的表,将各属性转化为各表对应的列
  2. 标识每个表的主键列,需要注意的是,要为没有主键的表添加ID编号列,该列没哟实际含义,只用作主键或外键
  3. 在数据库模型图中体现实体之间的映射关系

数据规范化

从关系型数据库表中除去冗余数据的过程称为规范化,如果使用得当,规范化是用于获得高效的关系型数据库表的逻辑结构的最好、最容易的方法。当规范化数据时,应执行下列操作:

  1. 将数据库的结构精简为最简单的形式
  2. 从表中删除冗余的列
  3. 标识所有依赖与其他数据的数据

三大范式内容如下:

  1. 第一范式:其目标是确保每列的原子性
  2. 第二范式:在第一范式的基础上更进一层,其目标是确保表中的每列都和主键相关
  3. 第三范式:在第二范式的基础上更进一层,其目标是确保每列都和主键列直接相关,而不是间接相关

MySQL数据库设计基础的更多相关文章

  1. nodejs进阶(6)—连接MySQL数据库

    1. 建库连库 连接MySQL数据库需要安装支持 npm install mysql 我们需要提前安装按mysql sever端 建一个数据库mydb1 mysql> CREATE DATABA ...

  2. 当忘记mysql数据库密码时如何进行修改

    因为长时间没有使用数据库了,或者把密码改完之后就忘了数据库密码,不能正常进入数据库,也无法修改密码,有一个简单的常用修改密码方式: 1.首先找到和打开mysql.exe和mysqld.exe所在的文件 ...

  3. MySQL数据库和InnoDB存储引擎文件

    参数文件 当MySQL示例启动时,数据库会先去读一个配置参数文件,用来寻找数据库的各种文件所在位置以及指定某些初始化参数,这些参数通常定义了某种内存结构有多大等.在默认情况下,MySQL实例会按照一定 ...

  4. 一起学微软Power BI系列-使用技巧(1)连接Oracle与Mysql数据库

    说起Oracle数据库,以前没用过Oracle不知道,但是这1年用Oracle后,发现真的是想狂吐槽,特别是那个.NET驱动和链接字符串,特别奇葩.总归是和其他数据库不一样,标新立异,不知道为何.另外 ...

  5. CentOS下mysql数据库常用命令总结

    mysql数据库使用总结 本文主要记录一些mysql日常使用的命令,供以后查询. 1.更改root密码 mysqladmin -uroot password 'yourpassword' 2.远程登陆 ...

  6. [原创]java使用JDBC向MySQL数据库批次插入10W条数据测试效率

    使用JDBC连接MySQL数据库进行数据插入的时候,特别是大批量数据连续插入(100000),如何提高效率呢?在JDBC编程接口中Statement 有两个方法特别值得注意:通过使用addBatch( ...

  7. mysql数据库主从同步

    环境: Mater:   CentOS7.1  5.5.52-MariaDB  192.168.108.133 Slave:   CentOS7.1  5.5.52-MariaDB  192.168. ...

  8. PDO连接mysql数据库

    1.PDO简介 PDO(PHP Data Object) 是PHP 5 中加入的东西,是PHP 5新加入的一个重大功能,因为在PHP 5以前的php4/php3都是一堆的数据库扩展来跟各个数据库的连接 ...

  9. mysql数据库开发常见问题及优化

    mysql 数据库是被广泛应用的关系型数据库,其体积小.支持多处理器.开源并免费的特性使其在 Internet 中小型网站中的使用率尤其高.在使用 mysql 的过程中不规范的 SQL 编写.非最优的 ...

随机推荐

  1. web中转发、重定向等问题的路径

    web中常用路径,转发,重定向,form表单action的路径 路径的写法: a.绝对路径写法:ServeltContext都必须用绝对路径."/" b.相对路径:其他情况都可以使 ...

  2. Java温故而知新-插入排序

    插入排序 插入排序的基本思想是将待排序的元素依次插入序列合适的位置,然后将这个位置后面的元素依次向后移动一位 位置1 2 3 4 5 6 序列5 4 2 1 8 3 设第1位为最初始的基础元素,也就是 ...

  3. Servlet工作原理分析

    最近在看<Java Web技术内幕>的Servlet工作原理,有点深奥和难以理解,于是乎,想通过一个简单的Demo将书上的思路理一遍,对Servlet有个更透彻更深的了解. Servlet ...

  4. 深入浅出数据结构C语言版(14)——散列表

    我们知道,由于二叉树的特性(完美情况下每次比较可以排除一半数据),对其进行查找算是比较快的了,时间复杂度为O(logN).但是,是否存在支持时间复杂度为常数级别的查找的数据结构呢?答案是存在,那就是散 ...

  5. Element is not clickable at point error in chrome

    I see this only in Chrome. The full error message reads: "org.openqa.selenium.WebDriverExceptio ...

  6. poj 3621 二分+spfa

    题意:给出一个有向图,问求一个回路,使得回路上的点权之和/边权之和最大. 这题主要是分析出如何确定ans值.我们将(a1*x1+a2*x2+..+an*xn)/(b1*x1+b2*x2+..+bn*x ...

  7. oracle 数据的导入导出

    一.数据导出 1.为输出路径建立一个数据库的directory对象. create or replace directory dumpdir as 'd:\'; 可以通过:select * from ...

  8. css预处理器less和scss之less介绍(一)

    第一次发的标题有误,重发一遍,抱歉了 一.less基础语法 1.声明变量:@变量名:变量值 使用变量:@变量名 例如 @color : #ff0000; @length : 100px; #div1{ ...

  9. 软件工程(GZSD2015)第三次作业提交进度

    第三次作业题目请查看这里:软件工程(GZSD2015)第三次作业 开始进入第三次作业提交进度记录中,童鞋们,虚位以待哈... 2015年4月19号 徐镇.尚清丽,C语言 2015年4月21号 毛涛.徐 ...

  10. java课程设计——博客作业教学数据分析系统(201521123083 戴志斌)

    目录 一.团队课程设计博客链接 二.个人负责模块或任务说明 三.自己的代码提交记录截图 四.自己负责模块或任务详细说明 五.课程设计感想 (题外话,终于可以用markdown建目录) 一.团队课程设计 ...