浅谈数据库三大范式的理解

首先声明一下,我的这个回答是个人工作总结,不适合考试答题昂

欢迎关注我的博客

前言:数据库设计其实不仅仅限制于三个范式,往下其实还有很多种,但对于大多数人来说,你又不搞科研,不造飞机大炮,掌握三大范式在工作中已经足够用了。

想法:数据库里有什么?说白了数据库里边不就是一张一张的关系数据表吗?只是表与表之间靠主外键关联而已。所以,你就把他理解为一张张的资料,一张资料里存着找到另一张资料的唯一线索,这个线索就是关系。

下面进入正题,也就是玩法:

1NF: 列的原子性,就是每一列不能再分了。就比如性别要么男要么女,这种的就叫不能再分了,但是地址不行,你不能把一连串的地址写到一起,要分为省、市、县、县的那个楼或者大厦什么的。

这是第一范式,不用问太多为什么,就像你买皮肤要充钱一样,你问人家就能免费给你吗?这是铁律。

2NF:有主键和副键之分,副键完全依赖于主键,主键是唯一的标识,代表着这个对象,而其他副键都是用来描述对象的。通过主键找到这个对象的整体信息。

3NF:这个其实工作久了就自然而然明白了。消除传递依赖,说白了就是有副键之间有关系的时候,最好另建一张表。这样就没有那么多冗余数据了。

就比如说家居有样式,你还要整个样式得分,样式评级什么的,就得另加一张表来描述样式的了。一个表对应一个类。A就是A,B就是B,C就是C。

还有就是存在1对多,多对多这种关系的时候,也要再分表,要不然数据冗余会特别大。100条数据还差点,1亿数据量就gg了。

三大范式没什么,就是这么设计比较好,会让你的数据更具有层次感。跟磁盘分区是一个道理。

 

备注:以上仅供参考,个人开发总结。希望对你有帮助,让我们共同进步。
孰能无过,如有错误和疑问欢迎留言。

 

转载于:https://www.cnblogs.com/onthewaytogrowth/p/11222084.html

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

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

相关文章

理解Silverlight的路径填充规则

这个可以扩展到矢量图中路径的填充规则,因为所有矢量图都采用这个规则来填充封闭路径的内部,在这里只以Silverlight为例。 在网上找了很久关于填充规则的介绍,经过了几天的阅读和自己理解还有亲自尝试,现在终于能说出过所以然来了…

PowerDesigner

PowerDesigner简介   PowerDesigner是Sybase公司的CASE工具集,使用它可以方便地对管理信息系统进行分析设计,它几乎包括了数据库模型设计的全过程。利用PowerDesigner可以制作数据流程图、概念数据模型、物理数据模型,可以生成多种客户端开…

call,apply,bind的区别

1转载于:https://www.cnblogs.com/YangJonathan/p/11223641.html

Fotolog对memcached的应用

Fotolog在21台server上部署了51个memcached实例,使用了175G,剩余254G。他们对待缓存的策略是:缓存所有在查询、获取和计算上慢的东西。 几种应用类型: Non-Deterministic Cache: 最常用的存储需要read的数据。平均每个memcached实…

Windows Azure 将正式更名为 Microsoft Azure

微软的公共云平台在2014年4月3日正式从Windows Azure 更名为Microsoft Azure。 windows azure是二级产品名,microsoft azure是一级产品名,和microsoft office、microsoft windows同级别。相当于是把云从windows系里剥离出来。所以微软现在的产品线应该是…

引入外部js如何通知页面其编码格式

快来java1234 吧 js中如何设置编码格式 <script type"text/javascript" src"xxx" charset"utf-8"></script> 只能使用在引入外部js文件时&#xff0c;可以声明编码格式&#xff0c;对行内脚本无效&#xff1b; 转载于:https://www.c…

java——Runtime

一、Runtime类&#xff1a;代表着Java程序的运行时环境&#xff1b; 每个Java程序都有一个Runtime实例&#xff0c;该类会被自动创建&#xff1b; 我们可以通过Runtime.getRuntime() 方法来获取当前程序的Runtime实例&#xff1b; 二、核心方法&#xff1a; &#xff08;1&…

基础测试

public class Test1 { /** * 第1题&#xff1a;从键盘接受一个数字&#xff0c;列出该数字的中文表示格式&#xff0c; 例如&#xff1a;键盘输入123&#xff0c;打印出一二三&#xff1b;键盘输入3103&#xff0c;打印出三一零三。 * * param args */ …

Jquery复习(七)之尺寸

jQuery 尺寸 方法 jQuery 提供多个处理尺寸的重要方法&#xff1a; width() height() innerWidth() innerHeight() outerWidth() outerHeight() jQuery 尺寸 jQuery width() 和 height() 方法 width() 方法设置或返回元素的宽度&#xff08;不包括内边距、边框或外边距&am…

C++学习_第1章_从C到C++

一、引用的概念和应用 1.引用的概念 下面写法定义了一个引用&#xff0c;并将其初始化为引用某个变量。类型名 & 引用名 某变量名;int n 4;int & r n; // r引用了n&#xff0c;r的类型是 int & 某个变量的引用&#xff0c;等价于这个变量&#xff0c;相当于该变…

更改默认安装位置到其他盘

1 同时按住Win R键&#xff0c;出现如下界面&#xff0c;在输入框中输入regedit&#xff0c;点击确定。 2 此时会进入到注册表编辑器界面&#xff0c;按如下路径选择&#xff1a;计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion 将所有默认路径&#xf…

jspservlet入门小项目--留言管理

一&#xff0c;jsp,servlet基础知识 1&#xff0c;jsp有一些内置对象&#xff0c;常用的有&#xff1a; out(PrintWriter),request(HttpServletRequest),response(HttpServletresponse),session(HttpSession),application(ServletContext) 注意&#xff1a;建议html和java代码分…

如何启用SQL Server 2008的FILESTREAM特性

如何启用SQL Server 2008的FILESTREAM特性 今天安装SQL Server 2008的时候没有注意&#xff0c;忘记了启用FILESTREAM特性&#xff0c;因为默认情况下FILESTREAM是禁用的。安装完成后&#xff0c;再导入一个.bak的备份数据库时提示FILESTREAM feature is disabled&#xff0c;到…

ARM Linux.2.6.34内核移植

ARM-LINUX-GCC版本4.3.2.以安装在/usr/local/arm/4.3.2下.第一步:修改linux-2.6.34/Makefile文件,在makefile中找到以下两条信息并做修改ARCH &#xff1f; arm CROSS_COMPILE &#xff1f;/usr/local/arm/4.3.2/bin/arm-linux-第二步:修改平台输入时钟修改平台的时钟频率&…

网络开发必备的HTTP协议知识

一、什么是HTTP协议 HTTP协议是一种应用层协议&#xff0c;HTTP是HyperText Transfer Protocol(超文本传输协议)的英文缩写。HTTP可以通过传输层的TCP协议在客户端和服务器之间传输数据。HTTP协议主要用于Web浏览器和Web服务器之间的数据交换。我们在使用IE或Firefox浏览…

SSP状态寄存器SSPSTAT

R R R R R R ─ ─ D/A P S R/W UA BF 地址&#xff1a;94h上电值&#xff1a;00h │ │ │ │ │ │ │ │ └┬┘ │ │ │ │ │ └──── 缓冲区满 …

----uni-app之解决HBuilderX安装less成功运行时提示未安装----

转载于:https://www.cnblogs.com/zjy850984598/p/11238777.html

js使浏览器窗口最大化(适用于IE的方法)

这里使用的方法是IE的私有特性&#xff0c;只能在IE中有效。主要是window.moveTo和 window.resizeTo方法。效果和点击最大化按钮差不多&#xff0c;有一点区别。点击最大化按钮后&#xff0c;浏览器的内容填充满显示器&#xff0c;浏览器窗口的边框被挤出显示器。而该js的最大化…

win7系统cocos2dx 3.4 绑定自定义类到Lua

Cocos2d-x 3.0开始使用bindings-generator来生成c类的lua绑定。bindings-generator基于tolua&#xff0c;通过配置tools/tolua中的ini文件以及运行genbindings.py就可以自动生成c类的绑定&#xff0c;具体的步骤在cocos2d-x-3.4\tools\tolua\README.mdown文件中&#xff0c;文档…

jQuery无任何标示获取td在表格中的行数和列数

当td没有任何标示时&#xff0c;在jQuery中实现获取其在表格中的行和列&#xff1a;<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns"http://www.w…