数据建模和数据库设计
数据建模和数据库设计
一、 实体-关系图
实体-关系图(Entity Relationship Diagram),也称为E-R图,提供了表示实体、属性和关系的方法,用来描述现实世界的概念模型。
构成E-R图的基本要素是实体、属性和关系
实体(Entity):实体用来表示具有相同特征和性质的事物(类似于java的类),实体由实体名和实体属性来表示。
属性(Attribute):实体所具有的某一特性,一个实体可以有若干个属性
关系(Relationship):实体彼此之间相互连接的方式称为关系。一般可分为以下 3 种类型:
一对一关系 (1 ∶ 1)
一对多关系 (1 ∶ N)
多对多关系 (M ∶ N)
may-be 和 must-be
在实体与实体之间的关系中,都会存在着may-be和must-be这俩种情况,例如:
系统中有顾客和订单俩个实体(1:N关系),一个顾客对应多个订单,一个订单对应一个顾客,而且一个顾客可以(may be)没有订单和他对应,一个订单一定(must be)会有顾客和它对应.
二、 ER图中符号的表示
1) # : 唯一, 以后可能表示为主键
2) * : 非空
3) o : 可有可无
4) 虚线: may be 顾客这边虚线,顾客可能没有订单
5) 实线: must be 订单这边实线,订单一定是属于某个客户。
6) 竖杠(|): 代表要强制在(|)一方建立一个联合主键,将对方ID拿过来做联合主键
7) 伞状图标代表多的一方,不是伞状图标则代表一的一方
三、 数据库设计
数据建模完成之后,可以把ER图转换成数据中的表
1.实体的名字转换为表的名字
2.实体的属性转换为表中的列
3.具有唯一特点的属性设置为表中的主键
4.根据实体之间的关系设置为表中某列为外键列(主外键关联)
注意:第四步主要是:实体关系--->表关系
设计关系数据库时,遵从不同的规范要求,才能设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库 冗余越小。
目前关系数据库有六种范式:
第一范式(1NF)
第二范式(2NF)
第三范式(3NF)
巴斯-科德范式(BCNF)
第四范式(4NF)
第五范式(5NF,又称完美范式)
注:满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了
第一范式:
一个表中,每个列里面的值是不能再分割的.
例如:我们设计的表中有一个列是:爱好
这个列的值可能会是这样:足球篮球乒乓球
但是这值是可以再分割的:足球、篮球、乒乓球
所以这种设计是不满足第一范式
第二范式:
第二范式是在满足第一范式的基础上
表中的非主键列都必须依赖于主键列
例如:
订单表: 订单编号 是主键
订单编号 订单名称 订单日期 订单中产品的生产地
这几个非主键列中,产品生产地是不依赖于订单编号的,所以这种设计是不满足第二范式
第三范式:
第三范式是在满足第二范式的基础上
表中的非主键列都必须直接依赖于主键列,而不能间接的依赖.
(不能产生依赖传递)
例如:
订单表: 订单编号 是主键
订单编号 订单名称 顾客编号 顾客姓名
顾客编号依赖于订单编号,顾客姓名依赖于顾客编号,从而顾客姓名间接的依赖于订单编号,那么这里产生了依赖传递,所以这个设计是不满足第三范式的
四、了解主键和外键
主键:
1.能做主键的列必须要满足 非空唯一的特点
2.只要满足非空唯一的任何列都可以做主键
3.可以让表中一个有意义的列做主键,比如说学号,它既表示学生学号又作为表中的主键,因为这个列满足非空唯一的条件
4.也可以找一个没有意义的列做主键,就是用来唯一标识一行记录的
5.我们可以让多个列联合在一起做表中的主键,那么它就是联合主键,要求这几个列的值联合在一起是非空唯一的
如下图所示,创建联合主键数据库自动将其列设置为not null:
create table t_csdn(id number,name varchar2(20),primary key(id,name))
外键:
1.表中的某一个列声明为外键列,一般这个外键列的值都会引用于另外一张表的主键列的值(有唯一约束的列就可以,不一定非要引用主键列)
2.另外一张表的主键列中出现过的值都可以在外键列中使用,没有出现过的值,都不能使用
3.外键列值也可以为空的,前提是这个外键列在表中不做主键,因为我们也可以把表中的外键列当做主键来使用(只有满足非空唯一的要求就可以)
4.如果把B表中的联合主键的值引用到A表中做外键,因为是两个列在B表中做联合主键,那么A表引用过来的时候也要把俩个列的值都引用过来,那么它们在A表中就会作为一个联合外键出现
如下图所示,引用上面所示的联合主键约束:
create table t_csdn2(id number,name varchar2(20),csdn_id number,csdn_name varchar2(15),primary key(id,name),foreign key(csdn_id,csdn_name) references t_csdn(id,name));
数据建模和数据库设计相关推荐
- 三、数据需求与数据库设计
数据需求与数据库设计 数据需求 项目中主要包含了用户.权限(菜单).角色三种类型的数据,各种数据包含的数据项如下: (1)用户:用户名.密码.生日.头像.简介.用户类型 (2)权限:权限名称.描述.链 ...
- 篮球赛场数据统计系统数据库设计实例
篮球赛场数据统计系统数据库设计实例 研究内容(篮球赛场数据统计系统) 1)比赛前对球队.球员各项基本信息的录入功能: 2)比赛时对进球得分.各种进球类型以及裁判评判情况等数据和信息的记录功能: ...
- UML建模、数据库设计和UI设计工具
1.Rational Rose 很多人说Rose不好用,但是我觉得还是挺好用的,用了七八年了,主要是用熟了,而且也没有什么大毛病 2.XDE 2003 .Net里面,你可以用XDE,但是只有for v ...
- 大数据量下数据库设计及分库分表拆分原则
在设计数据库的建设前,首先准备工作是了解业务,然后根据业务数据进行数据库设计,设计的同时需要考虑业务数据量.可改造性.数据弱一致性.读写分离.复杂SQL多样化等: 首先,可数据根据读弱一致性可以考虑添 ...
- 成都加米谷大数据教育:数据库设计中的 9 大常见错误
成都加米谷大数据培训带你了解那些数据库带来的挑战 其中一些问题不可避免,也无法控制.但是,其中相当一部分可以追溯到数据库设计本身的质量.我们在初步阶段所做的决定会对数据库最终的工作情况有深远的影响. ...
- oracle报错数据复数,Oracle数据库设计策略及规范
Oracle数据库设计策略及规范 设计策略及规范 1. 目的 定义Oracle数据库设计规范,作为数据库规划.设计.开发以及维护人员的技术参考资料.用以规范和指导相关人员的设计行为. 2. 概述 本文 ...
- mysql的数据结构设计原则,数据库设计的重要性与原则
随着工作经验的积累,我日益感觉到,对一名程序员来说,拥有良好的数据库设计能力是很重要的,甚至是最重要的. 程序员界有一句著名的话 Talk is cheap, show me the code 把这句 ...
- 5模型数据起别名_DMBOK 06|数据建模与设计
数记达摩院 提供高效能数据知识体系学习解决方案 您好,欢迎来到数记达摩院,我是王兵.今天我们来一起学习,DMBOK数据管理知识体系 第五章 数据建模与设计. 开始之前,我们先回顾一下上节课讲述的内容. ...
- 数据库设计 数据库系统概论(第五版)
萨师煊,王珊.数据库系统概论[M].第五版.北京:高等教育出版社,2014. 1数据库设计概述 1.1什么是数据库设计? 数据库设计是指对于一个给定的应用环境,设计一个优良的数据库逻辑模式和物理结构, ...
最新文章
- 大规模环境下基于语义直方图的多机器人实时全局定位图匹配
- python replace函数_Python3 replace()函数使用方法
- mysql空间扩展 VS PostGIS
- Hyperledger Fabric 链码(0) 说明
- 点击模型:达观数据提升算法精度的利器
- .NET托管内存类应用的内存泄漏分析和诊断(转)
- C++---map/multimap用法介绍
- 一个月 200 题,命中 80%,拿下 BAT,我独特的高效刷题法
- 一个XP SP3调用0地址蓝屏BUG
- java基础总结06-常用api类-包装类
- SSM俱乐部商城 俱乐部官网商城
- pr怎么导出预设_怎样用Pr导出清晰度高的视频?
- 互联网 必须有免费的精神
- JDK8中Lambda 表达式语法糖脱糖[非原创]
- Python sorted Pandas sort_values 中文拼音排序
- Ardunio开发实例-BMM150数字地磁传感器
- 微信公众号采集,历史文章采集,万能key采集,点赞阅读评论采集
- linux lsiutil raid创建,使用Lsiutil在線管理Dell(R410,R610等)內置陣列卡SAS 6i/R
- NMOS双向转换电路实测以及上升沿尖峰处理
- 全国大学生数学建模竞赛国家一等奖论文数学模型超全资料分享小白必备资料
热门文章
- 焦点损失函数 Focal Loss 与 GHM
- 关于Johnson-Trotter和字典序排列在《算法设计与分析基础》中的论述
- JMeter jp@gc - stepping thread group插件
- 解决Jupyter notebook报错:AssertionError: wrong color format ‘var(--jp-mirror-editor-variable-color)‘
- The SPECIALIST Lexicon API
- PL/SQL 创建定时任务
- 测试ai模糊软件,AE/PR人工智能自动人脸检测马赛克模糊插件
- Word中表的自动断开、且断开处有空白页面的问题之解决
- 答题卡识别任务--opencv python(附代码)
- 快速了解 Git 仓库