数据实体建模和数据库设计

数据实体建模和数据库设计

1. 实体关系模型(E-R模型):实体,属性,关系

实体:student(类)                         表:student

Id                                       id

Name                                    name

Course  c                                c_id(引用课程表id

映射关系:一对一,一对多,多对多。



 

    

2. 建表三大范式:

第一范式(1NF):数据库每一列都是不可再分的基本数据项,同一列中不能有多个值。即:所有的属性都必须是单值,也就是属性只表示单一的意义(记录可以重复,没有任何限制)。也即:不能以集合、序列作为属性值。

如(违背1NF):  name                  phoneNumber

                  张三              15855……,  0551-8506198

 

第二范式(2NF):数据库不存在非关键字段对任何候选关键字的依赖。即:属性要求唯一且非空(记录不可重复,但是数据可能会出现冗余)。也即:有一个字段唯一且非空的,比如id。但是数据很可能冗余,会造成数据不一致。

如(违背2NF): 选课(学号,课程号,成绩,学分)

                  主键:学号,课程号

                  问题:数据冗余:如果一个班级40人,学分存40次。

                        更新异常:如果学分更改,需要更新所有学生记录。

                        插入异常:如果新开课没有学生选修,记录无法插入。

                        删除异常:学生毕业,删除学生记录,相应的课程也被删除。

                   原因:学分对主键关键字(学号,课程号)存在部分的依赖。

                   解决办法(拆分):学生(学号,课程号,成绩)

                                    课程 (课程号,学分)

 

第三范式(3NF):数据库不存在非关键字段对任何候选关键字存在传递引用。即:非主属性只能依赖于主属性,不能依赖于其他非主属性(解决数据冗余问题)。也即:非主属性间无依赖关系了。在2NF的基础上拆表。比如student表和course表。

如(违背2NF):学生(学号,姓名,系号,系名,系地址)

                 主键:学号

                 也存在上述2NF中的异常

                 原因(存在传递):学号 ——> 系号 ——>系地址

                 解决办法(拆分): 学生(学号,姓名,系号)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值