美文网首页周文佳语强化班数据库
MySql个人总结(1)——三范式

MySql个人总结(1)——三范式

作者: 皆非的万事屋 | 来源:发表于2019-01-27 09:53 被阅读17次

                本篇三范式的总结一个人理解为主,不像网上的那么详细,是个人的看法。

                我把三个范式都浓缩为4个字(还有3个字)

                第一范式:不可再分(原子性)

                第二范式:完全依赖(一对一)

                第三范式:直接相关(父与子)

                第一范式在这里我就不过多解释了,最好理解的一个。

                从第二范式开始说——完全依赖。

                其实直接说完全依赖这个名字是比较专业一些的,也不太好懂,可以理解为一对一。举个例子:有一个电影表,里面包含了3个字段:影片id(主键),片名,类型id。其中影片id和片名之间是一对一的,就是这个影片id可以唯一确定一个片名,而这个片名也是唯一确定一个影片id,这时候就说该片名是完全依赖于影片id的,所以片名字段的值就是该片名。

                好了,有人会问 “所以片名字段的值就是该片名” ,这句话是什么意思,咱们再来看看电影表的第三个字段 “类型id”; 😕 ,这里是存的id  ,对吧,为啥是存id嘞,为啥不是直接把类型直接写进去嘞,为什么要在新建一张表来存类型嘞;

            好,这时候就要讨论电影id和类型之间的关系了。

            先讨论,一部电影只对应一种类型,那么一种类型对应了多种电影,那么,电影id和类型id之间就是多对一的关系,即

                一个电影可以唯一的确定一种类型,但是一种类型不能唯一确定一部电影,电影id和类型之间是部份依赖的关系,如果电影表的第三个字段是类型,你直接把电影的类型直接填了进去,那么,到以后就会出现更新,删除等异常(网上有详细说明)。So,这就是为什么要将类型单独分出去一张表。

                    以上是一个电影只对应一个类型。

                    那么最后一种情况,就是一部电影有多种类型,比如一部电影即是科幻,又是恐怖,那么,如果在电影表里还按类型id字段来存值的话,要怎么存呢?我要存两个数字进去吗?中间要加个逗号吗?No,No,No。

                    这个时候影片id和类型之间就是多对多的关系了。

                这个时候电影表里就不应该有类型id这个字段了,那有人会问,那电影的类型要存哪去?这个时候就要再新建一个类型id和电影id之间的关系表了。

                So,这样就可以将一部电影存多种类型了,当我们查询电影为科幻的时候有电影1,查恐怖的时候也有电影1,查询电影1的时候有类型1,2,查询电影2的时候有类型1,2,3,这样就实现了电影和类型多对多的关系。

                往往对于一部电影要有很多的关系表,比如还有国家,导演,主演等等,这些属性按正规来说是都不存在于电影表里的,是存在于关系表里的。

                所以为什么画ER图的时候要分清1对1,1对多,多对一,多对多,这都是对建表有着重要作用。

                那么第三范式——父与子。

                其实第三范式挺好理解的,直接相关,就是没有部分相关(函数传递);或者说主键元组和其他字段之间都是爸爸和儿子的关系,没有爸爸和孙子之间的关系,网上解释也很多。

                  这次的总结主要说明一下第二范式的个人理解。

    相关文章

      网友评论

        本文标题:MySql个人总结(1)——三范式

        本文链接:https://www.haomeiwen.com/subject/dihgjqtx.html