第8章 关系型数据库设计基础

1. 数据库三范式

1.1 第一范式 1NF

比如设计一个电商收货地址数据库,问题在于不利于数据的一些统计,比如需要统计“辽宁省”的订单。

收货人 地址
赵四 中国辽宁省铁岭市象牙山村xx组xx号
趙四 中國遼寧省鐵嶺市象牙山村xx組xx號
特朗普 美国华盛顿特区白宫

1NF指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。
修改为

收货人 收货国家 收货省 收货市 详细地址
赵四 中国 辽宁省 铁岭市 象牙山村xx组xx号
特朗普 美国 华盛顿特区 白宫
1.2 第二范式 2NF

比如设计一个记录学生考试成绩和选修课程的数据库
1. 学生表

学生ID 学生姓名
101 赵四
102 刘能

2. 课程表

课程ID 课程名
K901 Java
K902 数据库设计
K903 程序员的删库和跑路

3. 学生选课表

学生ID 课程ID 考试分数 课程学分
101 K901 88 3
101 K902 50 0
102 K901 98 3
102 K902 60 3

第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性。
上述问题:K903这门课无人选课,数据库中没有记录它的学分。学生选课表中的主键是由学生ID课程ID组成的联合主键课程学分在表中只依赖于课程ID,不是完全依赖于联合主键
修改后
1. 学生表

学生ID 学生姓名
101 赵四
102 刘能

2. 课程表

课程ID 课程名 课程学分
K901 Java 3
K902 数据库设计 3
K903 程序员的删库和跑路 3

3. 学生选课表

学生ID 课程ID 考试分数
101 K901 88
101 K902 50
102 K901 98
102 K902 60
1.3 第三范式 3NF

比如设计学生和班级数据库

学生ID 学生姓名 学生所在班级ID 班级名称
101 赵四 B01 研发一班
102 刘能 B01 研发一班

第三范式就是属性不依赖于其它非主属性,消除的是传递性的依赖关系
产生问题:B02(研发二班)暂时没有学生,在数据库中没有它的数据。B01班级有多个学生,数据会记录多次。
班级名称不直接依赖于主键学生ID,它是通过学生所在班级ID进行传递依赖。
修改后

学生ID 学生姓名 学生所在班级ID
101 赵四 B01
102 刘能 B01
班级ID 班级名称
B01 研发一班
B02 研发二班

2. 关系型实体关系

2.1 一对一关系

电商数据库设计中的商品介绍,商品介绍可能因为数据量较大,影响整个表的查询速度,而且它还不常用,将其独立放入一张表中。两张表通过同一个主键ID进行关联
商品表

商品ID 商品名称
101 iPhone56
102 iPhone57

商品详情表

商品ID 商品介绍
101 iPhone56是全新一代.....此处省略N字
102 iPhone57是最新一代.....此处省略N字
2.2 多对一关系和一对多关系

比较常见的数据库关系,参照EMP-DEPT的关系理解
学生表

学生ID 学生姓名 学生所在班级ID
101 赵四 B01
102 刘能 B01

班级表

班级ID 班级名称
B01 研发一班
B02 研发二班
关系图
2.3 多对多关系

较常见的数据库关系,参照学生-课程理解
1. 学生表

学生ID 学生姓名
101 赵四
102 刘能

2. 课程表

课程ID 课程名 课程学分
K901 Java 3
K902 数据库设计 3
K903 程序员的删库和跑路 3

3. 学生选课表

学生ID 课程ID 考试分数
101 K901 88
101 K902 50
102 K901 98
102 K902 60
多对多关系分析

关系型数据库中不能直接体现多对多关系,通过将多对多关系拆解成两对多对一关系

将多对多关系拆解成两对多对一关系

3. 设计技巧

3.1 主键

主键尽量不使用有实际意义的数据。主键一旦发生改变对数据的影响非常大

3.2 实体

实体性质的表,应该有一个flag的int型的列,用于表示删除,1-有效 其余的数字就是被删除。在数据库表操作中不做真正的delete操作

3.3 创建时间

实体性质的表,在创建一条记录时应该记录该数据的创建时间

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,198评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,663评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,985评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,673评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,994评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,399评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,717评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,407评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,112评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,371评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,891评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,255评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,881评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,010评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,764评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,412评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,299评论 2 260

推荐阅读更多精彩内容