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

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

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

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

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. DESEncrypt对称加密解密

    分享一个很好用的DESEncrypt对称加密解密的类 using System; using System.Security.Cryptography; using System.Text; usin ...

  2. Android layer-list(1)

     Android layer-list(1) Android layer-list,顾名思义,实现列表组合后形成的图层,写一个例子. activity_main.xml文件: <?xml v ...

  3. xtrabackup 恢复单表步骤

    1.apply-log应用redo日志,并导出表的数据字典innobackupex --apply-log --export  备份集 2.建表 如果知道表结构,则重建删除的表 create tabl ...

  4. Ubuntu 16.04下FireFox安装Flash插件

    下载: https://get.adobe.com/flashplayer/ 选择tar.gz包 解压 sudo tar zxvf flash_player_npapi_linux.x86_64.ta ...

  5. HDOJ--1285--确定比赛名次

    确定比赛名次 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  6. wpf 禁用启用webbroswer右键菜单

    //禁用脚本错误等类似的窗口信息 this.webBrowser1.ScriptErrorsSuppressed = true; //禁用右键菜单 this.webBrowser1.IsWebBrow ...

  7. 转 java面试题

    ● 简述synchronized?Object:Monitor机制: ● 简述happen-before规则 : ● JUC和Object : Monitor机制区别是什么 : 简述AQS原理 : ● ...

  8. Hdu5303 Delicious Apples 贪心

    题目链接: HDU5303 题意: 有一条环形的长为L的路,仓库在位置0处, 这条路上有n棵苹果树,给出每棵苹果树的位置和苹果数量, 问用 一次最多能装K个苹果的篮子   把这条路上全部苹果採回仓库最 ...

  9. MyBatis 中#{}与${}绑定参数的区别

    MyBatis 中#{}与${}绑定参数的区别: #{}将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #{id},如果传入的值是111,那么解析成sql时的值为o ...

  10. 将分布式-队列的实现交给redis

    import requestsimport reimport timefrom redis import Redisimport threading REDIS_HOST, REDIS_PORT, P ...