数据库设计与规范化
本文最后更新于33 天前,其中的信息可能已经过时,如有错误请留言

4.1 4.2 数据库设计流程以及数据抽象和建模方法

实体联系建模(案例4.3及案例4.4)

元素类型图形符号核心含义关键说明与示例
实体(Entity)单矩形框(□)独立存在的事物(人 / 物 / 概念)框内写实体名,如 “学生”“课程”“订单”
普通属性单椭圆形(○)实体的描述特征(数据项)用直线连对应实体,如 “姓名”“成绩”“价格”
主键属性下划线单椭圆形(○)唯一标识实体的属性示例:“学号”(学生实体主键)、“课程号”(课程实体主键)
复合属性含子椭圆形的单椭圆形可拆分子属性的属性如 “地址” 拆分为 “省”“市”“街道”,子椭圆形连父椭圆形
多值属性双椭圆形(○○)一个实体可对应多个值的属性如学生的 “联系方式”(多个电话)、“兴趣爱好”
派生属性虚线椭圆形(○)由其他属性推导得出的属性如 “年龄”(由 “出生日期” 计算)、“总成绩”(由多门课成绩求和)
关系(Relationship)单菱形框(◇)实体间的关联 / 相互作用框内写关系名,如 “选课”“授课”“下单”,用直线连关联实体
标识关系(弱实体关联)双菱形框(◇◇)弱实体与主实体的依赖关联如 “订单明细”(弱实体)与 “订单”(主实体)的 “包含” 关系
弱实体双矩形框(□□)依赖主实体存在的实体如 “订单明细” 依赖 “订单”,需通过标识关系关联
关系基数标注数字 / 符号(1、N、M 等)实体间关联的数量限制标注在关系与实体的连接线上,如 1:1(学生 – 身份证)、1:N(班级 – 学生)、M:N(学生 – 课程)

在关系数据库中不能直接实现多对多联系,那么就有了第四行内容读者和图书与借阅记录都是一对多的联系,借阅记录作为一个中间表呈现

案例4.5 为图书馆管理系统设计实现实体—联系模型

File – New model – Add Diagram

从WorkBench设计图表转换为代码:DataBases- Forward Engineer
因为有三个实体学生,借阅记录和书籍,所以导出有3张表

数据库范式设计(案例4.6至案例4.9)

可以帮我们设计出高效,一致且易于维护的数据库结构。3范式就可以解决大部分应用中的规范化问题

常用范式

一范式 (1NF)

  • 第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值,或不能有重复的属性。简而言之,第一范式遵从原子性,属性不可再分

作者列包含多个值违反了字段原子性的原则,所以不符合第一范式
解决方法:将作者信息拆解为单独的关系表,转化后变成两张表,形成数目和作者一对多的关系,这样每条书目的作者都可以在作者表中体现同时不违反第一范式

二范式 (2NF)

  • 满足第二范式必须先满足第一范式。第二范式要求实体设置主键并且其他非主属性完全依赖于主键,不能仅依赖主键的一部分(对于复合主键而言)。简而言之,第二范式要求非主键字段需完全依赖主键(在一范式的基础上消除部分依赖)

图书名称(非主键)仅仅依赖于条码号,而不是整个联合主键,而这个表的联合主键有多个列
解决方法:将图书信息拆分为单独的表,通过外键进行关联。

当然这会降低效率,实际应用中应权衡两者利弊

三范式 (3NF)

第三范式(3NF)是在第二范式的基础上建立起来的,即满足第三范式必须先满足第二范式。第三范式要求一个数据表中每一列数据都和主键直接相关,而不能间接相关。简而言之,第三范式要求非主键字段之间不能相互依赖

学院信息拆分为单独的表并通过外键进行关联

利用反范式设计兼顾效率与规范

订单需要快速查找,且信息一般都不变。可以改用反范式设计,牺牲一部分规范性约束换取效率的提升

学习笔记如有侵权,请提醒我,我会马上删除
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇