7-mysql数据库(数据表)的设计思想

数据库(数据表)的设计思想

所谓数据库的设计,通常就是指数据表(多个数据表)的设计,也就是表结构的设计,以及需要哪些表。

这种设计基本都是由每一个具体的项目功能来决定的。需要确定一个项目会用到哪些“现实数据”,以及为实现这些功能还需要创建(或定义)哪些数据才可以到达功能目标。这也就构成了一个项目的数据库设计工作。

数据库设计工作通常都是一个项目在技术层面最为重要和基础的工作。数据库设计未定下来之前,后续的开发工作很难进行。数据库设计得不好,后续的开发工作就可能问题重重。

数据库设计3范式(3NF)

范式,就是规范,就是指设计数据库需要(应该)遵循的原则。

每个范式,都是用来规定某种结构或数据要求,后一个范式都是在前一个范式已经满足的情况用来“加强要求”。

数据库设计范式是指导设计出没有或较少数据冗余并具有良好数据关系的理论而已。但实际上第一范式无需考虑就

可以显而易见地做到,而第二第三范式合在一起通常只要做到一个表只存一种数据就可以达到。

在实际应用中,并不总是去绝对完全符合三范式来设计数据表。有时候出于效率或其他因素的考虑,可能特意设计出略微不符合第二范式或第三范式的表,也是可以的。

第一范式(1NF): 原子性

原子性:存储的数据应该具有“不可再分性”。一个表中的数据(字段值)不可再分。

不良做法示例:

在这里插入图片描述

可见,其违反了原子性范式:学生字段的数据存储了多个可分的数据。

正确做法应该为:

在这里插入图片描述

第二范式(2NF): 唯一性,消除部分依赖

需要实现每一行数据具有唯一可区分的特性,并不能有部分依赖关系

唯一性,消除部分依赖:一个表中的每一行必须唯一可区分,且非主键字段值完全依赖主键字段值。也可说,必须消除在一个表中的非主键字段值仅仅依赖于部分主键值的情形。显然这个要求只对有联合主键的表才有可能违反情况的,而对单字段主键的表是不会出现的。

通常,给一个表加主键(也是推荐做法),就可以做到“唯一可区分”。

但主键有这样情况:

设定一个字段为主键:此时,表示该一个字段的值就可以明确确定一行数据。

设定多个字段为主键:表示只有这多个字段的值都确定后才能确定一行数据。此时也称为“联合主键”。

什么叫依赖:

如果确定一个表中的某个数据(A),则就可以确定该表中的其他另一个数据(B),则我们说:B依赖于A。

实际上,一个表只要有主键,则其他非主键一定是依赖于主键的。

什么叫“部分依赖”:

如果确定一个表中的某个数据组合(A,B),则就可以确定该表中的其他另一个数据(C),则我们说:C依赖于(A,B)(此时A,B通常就是联合主键)。

但是:如果某个数据D,它只依赖于数据A,或者说,A一确定,则D也可以确定,此时我们就称为“数据D部分依赖于数据A——可见部分依赖是指某个非主键字段,依赖于联合主键字段的其中部分字段。

不良做法示例:在这里插入图片描述

正确做法应该为:在这里插入图片描述

第三范式(3NF): 独立性,消除传递依赖

独立性,消除传递依赖:使一个表中的任何一个非主键,完全独立地依赖于主键,而不能又依赖于另外的非主键。

在一个具有主键的表中,如果一个表中的一个非主键字段(B)依赖于另一个非主键字段(A),因为A作为非主键字段,自然是依赖于主键字段的(范式2所决定),则此时就会出现传递依赖:(主键)->(A)->(B)。

第三范式就是要消除(或避免)这种依赖。通常的实际做法中,只要注意做到“一个表只存储一种数据”就可以符

合第三范式。则消除该传递依赖的的通常做法,就是,将B依赖于A的数据,分离到另一个表中。

不良做法示例:在这里插入图片描述

正确做法应该为:在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值