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

在实际的项目开发中,如果系统的数据存储量较大,设计的表比较多,表和表之间的关系比较复杂,就需要首先考虑规范的数据库设计,然后进行创建库,创建表的工作.  

如果设计不当,会存在数据操作异常,修改复杂,数据冗余等问题,程序性能会受到影响,通过进行规范化的数据库设计,可以消除不必要的数据冗余,获得合理的数据库设计,提高项目的应用性能.

>>>>设计数据库的步骤

1.收集信息

  需要了解数据库需要存储哪些信息(数据),实现哪些功能.

2.标识实体

  在收集需求信息后,必须标识数据库要管理的关键对象或实体,实体可以是有形的事物,如人和产品;也可以是无形的事物,如商业交易公司部门或发薪周期...

3.标识每个实体需要存储的详细信息(即实体的属性)

  就是需要细分出每个实体中包含的子成员信息,也称为该实体的属性,这些属性将组成表中的列.

4.标识实体之间的关系

  要标识实体之间的关系,需要分析数据库表,确定这些表在逻辑上是如何相关的,然后添加关系列建立起表之间的连接.

--在需求分析阶段解决了客户的业务和数据处理需求后,就进入了概要设计阶段,我们需要和项目的其他成员及客户沟通,讨论数据库的设计是否满足客户的业务和数据的处理需求,数据库的设计也需要图形化的表达方式--E-R(Entity-Relationship)图,也称之为 实体-关系图

>>>>E-R(Entity-Relationship)图

(实体使用矩形表示,一般是名词;属性使用椭圆表示,一般也是名词;联系使用菱形表示,一般是动词)

1.实体

  就是指现实世界中具有区分其他事物的特征或属性并与其他实体有联系的实体.严格的说,实体是指表中一行特定数据,也  常把整个表称之为一个实体.

2.属性

  属性可以理解为实体的特征.属性对应表中的列.

3.联系

  联系是两个或多个实体之间的关联关系

根据E-R图绘制酒店管理系统的E-R图

>>>>映射基数

  映射基数表示通过联系与该实体关联的其他实体的个数,对于实体集X和Y之间的二元关系,映射基数必须为下列技术之一:

>>一对一:X中的一个实体最多与Y中的一个实体相关联,并且Y中的一个实体最多与X中的一个实体相关联.

>>一对多:X中的一个实体可以与Y中的任意数量实体相关联;Y中的实体最多与X中的一个实体相关联.

>>多对一:X中的一个实体最多与Y中的一个实体相关联;Y中的实体可以与X中的任意数量实体相关联.

>>多对多:X中的一个实体可以与Y中的任意数量实体相关联,反之亦然.

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

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

>>>>数据库规范化

  从用户的角度而言,将所有信息放在一个表中很方便,因为这样查询数据库可能会比较容易,但是在数据库的实际操作中会出现很多的问题:

  1.信息重复:会造成存储空间的浪费及一些其他的问题,如(不小心输入"标准间","标准" ,则在数据库中将表示两种不同的  客房类型)

  2.更新异常:冗余信息不仅浪费存储空间,还会增加更新的难度.

  3.插入异常(无法表示某些信息):如(同样是标准间,却因为入住人数不同而造成价格的差异)

  4.删除异常(丢失有用的信息):当删除一行的信息时可能会丢失有用的信息.如(当"标准间"的住房记录中只有一条信息,那  么当我们删除此记录的时候会把"标准间"这一记录删除,而"标准间"也就不复存在了)

>>>>规范设计

  在设计数据库时,三大范式良好的规避了以上可能出现的错误

  1.第一范式

  确保每列的原子性.

  2.第二范式

  确保表中的每列都和主键相关(直接相关和间接相关皆可).

  3.第三范式

  确保每列都和主键直接相关,而不是间接相关.   (在上面的那张数据库设计E-R图就是符合第三范式的)

新人浅谈__(数据库的设计__数据库模型图,数据库E-R图,三大范式)的更多相关文章

  1. 浅谈Hybrid技术的设计与实现第二弹

    前言 浅谈Hybrid技术的设计与实现 浅谈Hybrid技术的设计与实现第二弹 浅谈Hybrid技术的设计与实现第三弹——落地篇 接上文:浅谈Hybrid技术的设计与实现(阅读本文前,建议阅读这个先) ...

  2. 浅谈Hybrid技术的设计与实现

    前言 浅谈Hybrid技术的设计与实现 浅谈Hybrid技术的设计与实现第二弹 浅谈Hybrid技术的设计与实现第三弹——落地篇 随着移动浪潮的兴起,各种APP层出不穷,极速的业务扩展提升了团队对开发 ...

  3. (转)浅谈Hybrid技术的设计与实现

    转载地址:https://www.cnblogs.com/yexiaochai/p/4921635.html 前言 浅谈Hybrid技术的设计与实现 浅谈Hybrid技术的设计与实现第二弹 浅谈Hyb ...

  4. 浅谈Hybrid技术的设计与实现【转】

    https://www.cnblogs.com/yexiaochai/p/4921635.html 前言 浅谈Hybrid技术的设计与实现 浅谈Hybrid技术的设计与实现第二弹 浅谈Hybrid技术 ...

  5. 朱晔的互联网架构实践心得S2E6:浅谈高并发架构设计的16招

    朱晔的互联网架构实践心得S2E6:浅谈高并发架构设计的16招 概览 标题中的高并发架构设计是指设计一套比较合适的架构来应对请求.并发量很大的系统,使系统的稳定性.响应时间符合预期并且能在极端的情况下自 ...

  6. 浅谈Hybrid技术的设计与实现第三弹——落地篇

    前言 接上文:(阅读本文前,建议阅读前两篇文章先) 浅谈Hybrid技术的设计与实现 浅谈Hybrid技术的设计与实现第二弹 根据之前的介绍,大家对前端与Native的交互应该有一些简单的认识了,很多 ...

  7. 【Fiori系列】浅谈SAP Fiori的设计美感与发展历程

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[Fiori系列]浅谈SAP Fiori的设计美 ...

  8. iOS开发之浅谈MVVM的架构设计与团队协作

    今天写这篇博客是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇博客的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦 ...

  9. 浅谈机器人控制与仿真设计----RDS和ROS

    机器人控制.仿真或实验,主要由三个部分组成,机器人.环境和算法. 当然各部分又包含很多子部分和功能,这里主要以仿真为主,为了使得仿真结果能够直接应用到实际机器人上,这里分别以RDS和ROS对比介绍.h ...

随机推荐

  1. nginx+keepalived+consul 实现高可用集群

    继 负载均衡 之 nginx+consul+consul template,我这次将使用2台虚拟机,来做一个简单的双机负载均衡试验. 试验目标: 1. 当参加负载均衡的子节点服务,有任何其中一个或多个 ...

  2. Hello Shiro

    [HelloWorld Shiro] 1.搭建开发环境-加入jar包 2.步骤(前提:已下载好Shiro资源包): ①找到shiro-root-1.2.3-source-release包, ②按Apa ...

  3. 【Codeforces 675D】Tree Construction

    [链接] 我是链接,点我呀:) [题意] 依次序将数字插入到排序二叉树当中 问你每个数字它的父亲节点上的数字是啥 [题解] 按次序处理每一个数字 对于数字x 找到最小的大于x的数字所在的位置i 显然, ...

  4. WinForm 中限制只能输入数字

    在Winform(C#)中要实现限制Textbox只能输入数字,一般的做法就是在按键事件中处理,判断keychar的值.限制只能输入数字,小数点,Backspace,del这几个键.数字0~9所对应的 ...

  5. 14、Java并发性和多线程-Java ThreadLocal

    以下内容转自http://ifeve.com/java-theadlocal/: Java中的ThreadLocal类可以让你创建的变量只被同一个线程进行读和写操作.因此,尽管有两个线程同时执行一段相 ...

  6. spring boot日期转换

    spring boot 作为微服务简易架构.拥有其自身的特点.快速搭建架构 简单 快捷.这里我只是简单的介绍下我遇到的其中的  两个问题.第一前台页面传递的时间类型 无法自动映射到Java的 Date ...

  7. C++中设计一个类,使其不能继承

    1.C++11中已经有了final关键字:它的作用是指定类的虚函数不能被该类的继承类覆盖(override),或者是指定一个类成为一个不能被继承的类(final class) 2.派生类用调用基类的构 ...

  8. Workspace in use or cannot be created, choose a different one.--错误解决的方法

    eclipse 使用一段时间后.有时会由于一些故障自己就莫名奇异的关闭了,再打开时有时没有问题,有时有会提示错误 Workspace Unavailable: Workspace in use or ...

  9. 精确计算java中float和double的精度

    [本文相关的代码放在github上.地址为:https://github.com/VigourJiang/StructuredFloat] Java中double类型的格式基本遵循IEEE 754标准 ...

  10. using gdb to debug c program

    #include <stdio.h> static void display(int i, int *ptr); int main(void) { int x = 5; int *xptr ...