Mysql建表规范

建表规范

-- Normal Format, NF
        - 每个表保存一个实体信息
        - 每个具有一个ID字段作为主键
        - ID主键 + 原子表
-- 1NF, 第一范式
        字段不能再分,就满足第一范式。
-- 2NF, 第二范式
        满足第一范式的前提下,不能出现部分依赖。
        消除复合主键就可以避免部分依赖。增加单列关键字。
-- 3NF, 第三范式
        满足第二范式的前提下,不能出现传递依赖。
        某个字段依赖于主键,而有其他字段依赖于该字段。这就是传递依赖。
        将一个实体信息的数据放在一个表内实现。

示例

1.第一范式 (1NF)

假设我们有一个学生表,包含学生 ID、姓名、地址、电话号码。

学生ID姓名地址电话号码
1张三北京123456
2李四上海654321

这个表已经满足第一范式,因为每个字段都是不可再分的原子性值。

2.第二范式 (2NF)

假设我们有一个学生课程表,包含学生 ID、课程 ID、成绩。

学生ID课程ID成绩
110190
110285
210192
210388

这个表满足第一范式,但存在部分依赖问题。因为学生 ID 和课程 ID 联合构成了主键,但成绩只依赖于这个联合主键的一部分 - 课程 ID。

为了满足第二范式,我们需要将这个表拆分为两个表:

学生表:

学生ID姓名
1张三
2李四

课程成绩表:

学生ID课程ID成绩
110190
110285
210192
210388

3.第三范式 (3NF)

假设我们有一个学生表,包含学生 ID、姓名、专业 ID、专业名称。

学生ID姓名专业ID专业名称
1张三1计算机
2李四2经济学

这个表满足第二范式,但存在传递依赖问题。因为专业名称依赖于专业 ID,而专业 ID 又依赖于学生 ID。

为了满足第三范式,我们需要将这个表拆分为两个表:

学生表:

学生ID姓名专业ID
1张三1
2李四2

专业表:

专业ID专业名称
1计算机
2经济学

 通过以上示例,我们可以看到,随着范式的提高,表结构越来越细化,但数据冗余度也越来越低,满足了数据库设计的规范性和效率。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值