SQL三范式理解

                               SQL三范式的理解

做为一条有用的数据,那么他必须是完整的,也就是数据的完整性,那怎么才能做到数据的完整性呢?在设计数据库时我们需要满足三范式的要求,那什么是三范式呢,三范式分为三部分,第一步是数据的原子性,所谓原子就是不可分割的最小的单位,我们设计的表里面的列必须是一个能够表达完整的信息的最小的的列,比如地址”广州南沙”它虽然是正确的地址了,但是这句话说明了两个不同的意思,第一个是广州市,第二个是南沙区,因此我们要把它们单独分出了,做成递归的样式,变成每个字段的原子,比如“广州”,“南沙”,这样无论在阅读上还是运用上都方便了许多,我们要求数据设计的第一范式是:1.确保每列的原子性

2. 如果每列都是不可再分的最小数据单元(也称为 最小的原子单元),则满足第一范式(1NF)

 

可以看到上面如果不用第一范式的话,主键会很多,看起来很混乱,说明的对象重复啰嗦,运用起来更加麻烦,所以当做成第一范式时看起来简洁,运用起来也很好。不会出现数据的混乱,这样做免去了手动区找数据,又能确定它的唯一性。在方便的同时,还能减少数据的沉余,从而达到一箭双雕的效果。让我们的数据库设计都满足第一范式吧。

 

我们说了,设计数据库要是三范式,那么第一范式达到了,现在到第二范式了。

第二范式是:如果一个关系满足第一范式(1NF)的同时,并且除了主键以外的其他列,都依 赖与该主键,则满足第二范式(2NF)。

并且我们要求每张表只描述一件事情

我们可以看到左边的表已经满足了第一范式,每个字段都是最小的可以表达完整意思的数据,那么问题来了,即使是这样我们看到这张表的时候,给人的感觉是很绕的,它一张表说明了两种不同的事物,这样在我们新增数据的时候会让我们很麻烦,就拿上面的例子来说,我要新增一条订单,那么我必须要把产品的信息一起填上,但现实中,我们并不用这么麻烦的步骤,我们新增订单就只管订单的,跟产品毫无关系,但是我也要保留产品的信息,那该怎么办呢,那么就要用到我们数据库设计的第二范式了,因为第二范是每张表说明同一事物的所有信息,当我们把这张表分成,订单和产品两张表时,我们就可以明确的知道哪张表包含了哪些信息,这样做方便我们查看数据,方便数据的新增修改和删除,已经还能减少数据的余沉,简直一箭多雕了。让我们把数据库数据的第二范式灵活的运用起来。

第三范式是:如果一个关系满足第二范式(2NF),并且除了主键以外的其他列 都不传递依赖于主键列,则满足第三范式(3NF)

第三范式是满足第二范式的同时还有跟这张表有关系的简介数据我们可以调用外键来进行应用,比如我现在有一张学院表,里面有一条数据“华南理工大学”,该跳的数据的主键ID是15,那么同时我们在学生表里面也有一条数据是“小明”,这条数据的ID是”1”,这么说明小明是哪个学院的呢,我们也有两张表,一张学院表,一张学生表,这时候我们就要想是先有学生,还是先有学生呢,按照正常逻辑来讲,我们是先有学院才有学生,因为学生是学院里面的,那么学院就是父表,学生是子表,要先两张表有关系,我们就也赋予子表 “父表的ID“,也就是在小明这条数据里加上15的学院ID,那么小明就是华南理工大学的了。这样一来,我们还能看到,我们新增学院时,只要新增只关于学院的信息就可以了,完全不需要说明里面有多少学生,是不是很方便,而学生表,一旦要新增,就必须说明该新增学生是哪个学院的,不然数据就不完整,这样的逻辑跟实际情况完全吻合,这样的三范式不仅能让我们更加好的看出数据,还能方便的对进数据进行操作,真是一种很好的数据设计方式。让我们灵活运用这种设计方式,让我们的做出的程序能更加的好用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值