数据库设计三大范式【转载】

数据库设计范式

什么是范式:简言之就是,数据库设计对数据的存储性能,还有开发人员对数据的操作都有莫大的关系。所以建立科学的,规范的的数据库是需要满足一些

规范的来优化数据数据存储方式。在关系型数据库中这些规范就可以称为范式。

什么是三大范式:

第一范式:当关系模式R的所有属性都不能在分解为更基本的数据单位时,称R是满足第一范式的,简记为1NF。满足第一范式是关系模式规范化的最低要

求,否则,将有很多基本操作在这样的关系模式中实现不了。

第二范式:如果关系模式R满足第一范式,并且R得所有非主属性都完全依赖于R的每一个候选关键属性,称R满足第二范式,简记为2NF。

第三范式:设R是一个满足第一范式条件的关系模式,X是R的任意属性集,如果X非传递依赖于R的任意一个候选关键字,称R满足第三范式,简记为3NF.

注:关系实质上是一张二维表,其中每一行是一个元组,每一列是一个属性

理解三大范式

第一范式

   1、每一列属性都是不可再分的属性值,确保每一列的原子性

 

   2、两列的属性相近或相似或一样,尽量合并属性一样的列,确保不产生冗余数据。

 

 

 

如果需求知道那个省那个市并按其分类,那么显然第一个表格是不容易满足需求的,也不符合第一范式。

 

 

 

显然第一个表结构不但不能满足足够多物品的要求,还会在物品少时产生冗余。也是不符合第一范式的。

 

第二范式

 

每一行的数据只能与其中一列相关,即一行数据只做一件事。只要数据列中出现数据重复,就要把表拆分开来。

 

 

一个人同时订几个房间,就会出来一个订单号多条数据,这样子联系人都是重复的,就会造成数据冗余。我们应该把他拆开来。

 

 

 

 

 

这样便实现啦一条数据做一件事,不掺杂复杂的关系逻辑。同时对表数据的更新维护也更易操作。

 

第三范式

 数据不能存在传递关系,即没个属性都跟主键有直接关系而不是间接关系。像:a-->b-->c  属性之间含有这样的关系,是不符合第三范式的。

比如Student表(学号,姓名,年龄,性别,所在院校,院校地址,院校电话)

这样一个表结构,就存在上述关系。 学号--> 所在院校 --> (院校地址,院校电话)

这样的表结构,我们应该拆开来,如下。

(学号,姓名,年龄,性别,所在院校)--(所在院校,院校地址,院校电话)

 

最后:

三大范式只是一般设计数据库的基本理念,可以建立冗余较小、结构合理的数据库。如果有特殊情况,当然要特殊对待,数据库设计最重要的是看需求跟性能,需求>性能>表结构。所以不能一味的去追求范式建立数据库。

 

 

转载于:https://www.cnblogs.com/xjyxp/p/11165030.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/263536.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MVC2验证(自定义异常)

源码 /Files/zhangchao1/MVCValidationTest.rar 在contorllers内虽然简单&#xff0c;但有却有些不符合mvc 的设计理念&#xff0c;这里&#xff0c;我们将验证放到DLL部分 首先建立自定义的异常类 public class MyExcptions:Exception { //存放错误信息 List<string[]> …

LeetCode—210. 课程表 II

210. 课程表 II 题目描述&#xff1a;现在你总共有 numCourses 门课需要选&#xff0c;记为 0 到 numCourses - 1。给你一个数组 prerequisites &#xff0c;其中 prerequisites[i] [ai, bi] &#xff0c;表示在选修课程 ai 前 必须 先选修 bi 。 例如&#xff0c;想要学习课…

Visual C++2010的使用

Tools->Settings>Rest... 还原所有设置 运行程序&#xff1a;"D:\Program Files\VCExpress\Install\Microsoft Visual Studio 10.0\Common7\IDE\VCExpress.exe" 一、Visual C2010&#xff08;微软vc2010&#xff09;如何编写并运行C程序&#xff1f; 1、刚开始…

LeetCode—211. 添加与搜索单词 - 数据结构设计

211. 添加与搜索单词 - 数据结构设计 题目描述&#xff1a;请你设计一个数据结构&#xff0c;支持 添加新单词 和 查找字符串是否与任何先前添加的字符串匹配 。 实现词典类 WordDictionary &#xff1a; WordDictionary() 初始化词典对象 void addWord(word) 将 word 添加到…

58或与赶集合并,几人欢喜几人愁

前奏&#xff1a;相信在北京的园友们今天早上一觉醒来&#xff0c;让大家感慨的不光是昨天的沙尘暴&#xff08;2月雾霾3月风沙4月来了个套餐&#xff09;&#xff0c;还有就是58或与赶集合并的消息。 不过这种冤家相聚的例子今年已经有好几起了&#xff0c;like: 优酷土豆/快的…

Java中abstract和interface的区别

abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制&#xff0c;正是由于这两种机制的存在&#xff0c;才赋予了Java强大的面向对象能力。 abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性&#xff0c;甚至可以相互替换&#x…

解决报表部署时数据源存在不能替换的问题

打开报表项目属性页配置属性&#xff0d;常规设置OverWriteDataSourcestrue即可&#xff01;转载于:https://www.cnblogs.com/wyq2004/archive/2004/07/29/28300.html

android 智能指针的学习先看邓凡平的书扫盲 再看前面两片博客提升

android 智能指针的学习先看邓凡平的书扫盲 再看前面两片博客提升转载于:https://www.cnblogs.com/jeanschen/p/3507512.html

LeetCode—213. 打家劫舍 II

213. 打家劫舍 II 题目描述&#xff1a;你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋&#xff0c;每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈 &#xff0c;这意味着第一个房屋和最后一个房屋是紧挨着的。同时&#xff0c;相邻的房屋装有相互连通的防盗系统…

【转载】Linux下有趣的命令

转载&#xff1a;http://www.cnblogs.com/kernel_hcy/archive/2011/05/01/2033928.html yes&#xff1a;输出一串y&#xff0c;有时可以用来对付很多y/n选择的应用 。输出很多。。。banner&#xff1a;打印字符标题&#xff0c;就是用字符拼出大字来 ,最好把窗口最大化&#xf…

企业网站常用中英文对照表

网站导航 site map 公司简介 PROFILE or COMPANY Profile or Company 公司设备 EQUIPMENT Equipment 公司荣誉 GLORIES Glories 企业文化 CULTURE Culture 产品展示 PRODUCT Product 资质认证 quality certification 企业规模 SCALE Scale 营销网络 Sales Network 组织…

Cookies讲座

什么是 Cookie&#xff1f;Cookie 其实是一个标签&#xff0c;经常可能听到的中文翻译&#xff1a;小舔饼。当你访问一个需要唯一标识你的站址的 WEB 站点时&#xff0c;它会在你的硬盘上留下一个标记&#xff0c;下一次你访问同一个站点时&#xff0c;站点的页面会查找这个标记…

LeetCode—37. 解数独(困难)

37. 解数独&#xff08;困难&#xff09; 题目描述&#xff1a; 编写一个程序&#xff0c;通过填充空格来解决数独问题。 数独的解法需 遵循如下规则&#xff1a; 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内…

linux下时间同步的两种方法分享

为什么80%的码农都做不了架构师&#xff1f;>>> 方法1&#xff1a;与一个已知的时间服务器同步 ntpdate time.nist.gov 方法2&#xff1a;linux自动同步时间vi /etc/crontab 00 0 1 * * root rdate -s time.nist.gov 转载于:https://my.oschina.net/boltwu/blo…

.Net TCP/UDP 编程 【一】【原创】

命名空间&#xff1a; using System.Net;using System.Net.Sockets; 关键 &#xff1a; TCP /UDP连接 UDP UDP 与 tCP的主要区别在于 UDP 不一定提供可靠的数据传输。事实上&#xff0c;该协议不能保证数据准确无误地到达目的地。UDP 在许多方面非常有效。当某个程序的目标是尽…

友元函数和友元类

友元函数是指某些虽然不是类成员却能够访问类的所有成员的函数。。类授予它的友元特别的访问权。通常同一个开发者会出于技术和非技术的原因&#xff0c;控制类的友元和成员函数&#xff08;否则当你想更新你的类时&#xff0c;还要征得其它部分的拥有者的同意&#xff09;。 /…

LeetCode—216. 组合总和 III

216. 组合总和 III 题目描述&#xff1a; 找出所有相加之和为 n 的 k 个数的组合&#xff0c;且满足下列条件&#xff1a; 只使用数字1到9 每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次&#xff0c;组合可以以任何顺序返回。 考察重…

发表和编辑Post的一个Bug

其实这个Bug很早以前就发现了&#xff0c;只是一直忘了问dudu。在写Post的时候&#xff0c;当我需要改变字体颜色&#xff0c;例如选择红色时&#xff0c;文字的字体发生了改变。但当我第二次选择字体颜色&#xff0c;且选择相同的颜色时&#xff0c;选中的文字颜色就没有发生变…

maven配置_eclipse创建maven_maven插件配置

为什么80%的码农都做不了架构师&#xff1f;>>> 最近项目开发中需要使用maven。Maven这个东西是我2年前自学的。这2年之中基本没有使用过。现在项目需要&#xff0c;只有重新来一遍回锅肉。重新学习。经过一下午的斗争&#xff0c;一下午的各种问题各种解决&#x…

收藏

源码解析&#xff1a;http://www.iocoder.cn/categories/Sharding-JDBC/?cnblog java源码&#xff1a;http://blog.csdn.net/javazejian js 火狐文档&#xff1a;https://developer.mozilla.org/zh-CN/docs/Web/JavaScript NIO:http://www.iteye.com/magazines/132-Java-NIO J…