脱口秀数据库三个范式
2015-12-08 13:45
435 查看
三个数据库的模式肯定是不陌生。官方的解释是很抽象,谁刚开始学习比较难理解。对于这一块的知识,我会读的。这将是忘记,忘了再看。每当别人问我的时候,必须先看看教材,回想一段时间才干理清。
为什么当别人提问时不能立刻把三范式的经典思想说出来呢?通过听米老师的“怎样高效学习”这堂课,我发现原因是我自己没有融入到三范式中。三范式没有和自己发生关系。
以下,我用三个有趣的小故事帮助大家高速、深刻的理解三范式的含义。
第一范式。官方解释:关系模式R的每一个关系r的属性值都是不可分的原子值。这个官方解释还不算太难,比方我们想把“电话号码”作为数据库字段,在“电话号码”以下又分“手机号码”和“座机号码”,这就违反了第一范式。用我的话说就是“把事说清了”。你仅仅说“电话号码”,我知道你说的是“手机号码”还是“座机号码”?
第二范式,官方解释:非主属性必须全然函数依赖于R的主关系键。
怎么样,有点晕了吧!比方:在SCD表中,有字段SNO。SN,Age,Dept,MN,CNo。Score。知道SNo能够确定SN、Age、Dept、MN,知道SNo、CNo能够确定Score。这个事好比土匪们选大哥。小弟SN、Age、Dept、MN选举SNo当土匪头子,Score选举SNo、CNo两个人共同当土匪头子。
结果意见达不成一致,土匪们闹分裂。一句话“仅仅要有一个人不允许。这事就不能通过”。大哥SNo带着小弟SN、Age、Dept、MN成立土匪旗号SD。大哥SNo又和CNo带着小弟Score合伙成立土匪旗号SC。到此,故事告一段落。
第三范式。官方解释:每一个非主属性都不传递函数依赖于R的主关系键。这个怎么样,彻底晕了吧!
比方:在SD表中,知道SNo能够确定Dept,知道Dept能够确定MN(系主任名)。这事咱接着上面第二范式的土匪故事接着讲,大哥SNo有小弟SN、Age、Dept、MN,但Dept特别有才。又把MN招为自己的小弟。天天忽悠MN,给MN灌输反动思想,最终有一天Dept带着MN独立了。成立了土匪旗号D。
大哥SNo感觉SD已经不完整了,把土匪旗号改为S。SNo经过这次教训。决定下道命令:“一个人仅仅能扮演一个角色”,否则,不符合三个范式,因为关系模式分解。
这个故事讲完,据推测,通过这个小故事。我相信这三个范式的精髓深深地刻在大脑。
为什么当别人提问时不能立刻把三范式的经典思想说出来呢?通过听米老师的“怎样高效学习”这堂课,我发现原因是我自己没有融入到三范式中。三范式没有和自己发生关系。
以下,我用三个有趣的小故事帮助大家高速、深刻的理解三范式的含义。
第一范式。官方解释:关系模式R的每一个关系r的属性值都是不可分的原子值。这个官方解释还不算太难,比方我们想把“电话号码”作为数据库字段,在“电话号码”以下又分“手机号码”和“座机号码”,这就违反了第一范式。用我的话说就是“把事说清了”。你仅仅说“电话号码”,我知道你说的是“手机号码”还是“座机号码”?
第二范式,官方解释:非主属性必须全然函数依赖于R的主关系键。
怎么样,有点晕了吧!比方:在SCD表中,有字段SNO。SN,Age,Dept,MN,CNo。Score。知道SNo能够确定SN、Age、Dept、MN,知道SNo、CNo能够确定Score。这个事好比土匪们选大哥。小弟SN、Age、Dept、MN选举SNo当土匪头子,Score选举SNo、CNo两个人共同当土匪头子。
结果意见达不成一致,土匪们闹分裂。一句话“仅仅要有一个人不允许。这事就不能通过”。大哥SNo带着小弟SN、Age、Dept、MN成立土匪旗号SD。大哥SNo又和CNo带着小弟Score合伙成立土匪旗号SC。到此,故事告一段落。
第三范式。官方解释:每一个非主属性都不传递函数依赖于R的主关系键。这个怎么样,彻底晕了吧!
比方:在SD表中,知道SNo能够确定Dept,知道Dept能够确定MN(系主任名)。这事咱接着上面第二范式的土匪故事接着讲,大哥SNo有小弟SN、Age、Dept、MN,但Dept特别有才。又把MN招为自己的小弟。天天忽悠MN,给MN灌输反动思想,最终有一天Dept带着MN独立了。成立了土匪旗号D。
大哥SNo感觉SD已经不完整了,把土匪旗号改为S。SNo经过这次教训。决定下道命令:“一个人仅仅能扮演一个角色”,否则,不符合三个范式,因为关系模式分解。
这个故事讲完,据推测,通过这个小故事。我相信这三个范式的精髓深深地刻在大脑。
相关文章推荐
- MongoDB命令学习
- oracle decode的如何使用
- Redis 学习笔记(一)
- 带进度的SQL Server FileStream存取
- 使用Log4jdbc-log4j2打印mybatis的sql语句
- MySQL查询交集
- MySQL5.7.9压缩包安装配置
- .net 访问远程的MSSQL报System.AccessViolationException错误的解决方法
- springmvc+mybatis+spring 整合 bootstrap html5 mysql oracle SSM框架源码 SSH maven
- 应用UML进行数据库建模
- dos命令查看手机内置sqlite数据库--->如何刷rom包--->chmod -R 777命令查看--->adb pull 数据库
- 安装了VS2013,MSSQL Server 2008远程过程调用失败。[0x800706be]
- Oracle账号——用于java JDK等软件的下载
- 重置 MySQL root 密码
- SQL重复记录查询
- java对redis的基本操作
- 远程连接mysql容易遇到的2个问题
- Oracle-JDBC连接
- mysql实验室
- Oracle管理端 使用PL/SQL