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

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

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

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

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. eclipse如何能快速找到某个文件夹或者文件

    eclipse如何能快速找到某个文件夹或者文件 直接在editor中右键 Show in -> Package Explorer 在package explore 中选中link就可以了 (魔芋 ...

  2. JavaScript保留关键字(全)

    JavaScript 标准 所有的现代浏览器已经完全支持 ES5(ECMAScript 5). JavaScript 保留关键字(keyword) Javascript 的保留关键字(标识符)不可以用 ...

  3. 【Codeforces 300C】Beautiful Numbers

    [链接] 我是链接,点我呀:) [题意] 让你找到长度为n的数字 这个数字只由a或者b组成 且这n个数码的和也是由a或者b组成的 求出满足这样要求的数字的个数 [题解] 枚举答案数字中b的个数为y,那 ...

  4. 【Codeforces 484A】Bits

    [链接] 我是链接,点我呀:) [题意] 让你求出l~r当中二进制表示1的个数最多的数x [题解] 最多有64位 我们可以从l开始一直增大到r 怎么增大? 找到l的二进制表示当中0所在的位置 假设i这 ...

  5. ansible playbooks loop循环

    在一个task中循环某个操作 1.标准循环 - name: add several users user: name: "{{ item }}" state: present gr ...

  6. [luoguP1005] 矩阵取数游戏(DP + 高精度)

    传送门 和奶牛那个题很像,每一行状态互不影响,也就是求 n 遍DP 不过高精度非常恶心,第一次写,调了我一上午. ——代码 #include <cstdio> #include <c ...

  7. Yet another Number Sequence 矩阵快速幂

    Let’s define another number sequence, given by the following function: f(0) = a f(1) = b f(n) = f(n ...

  8. 1067 Bash游戏 V2

    有一堆石子共有N个.A B两个人轮流拿,A先拿.每次只能拿1,3,4颗,拿到最后1颗石子的人获胜.假设A B都非常聪明,拿石子的过程中不会出现失误.给出N,问最后谁能赢得比赛. 例如N = 2.A只能 ...

  9. Ubuntu 16.04下使用gcc输出汇编的.0文件为可执行文件时出现:`_start'被多次定义

    错误如下: `_start'被多次定义 /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o:(.text+0x0):第一次 ...

  10. css3的高级而有用且很少人知道的属性和样式

    1.-webkit-mask 概属性可以给一个元素添加蒙层,蒙层可以是一个渐变或者半透明的png图片,这张png图片的 alpha 为 0 的位置会不显示元素这部分,alpha 为 1 的位置会显示元 ...