Pre
This article mostly inspired by Learning MySql by Vinicius M.Grippa(Brazil) & Sergey Kuzmichev(Russia)
本文主要专注于数据库的设计,使用SQL语言对数据库表进行创建将相对独立于本文
阅读此文之前请确保对数据库基本概念有了比较完整的理解, 包括实体、关系、键等等概念。🩵🩵🩵
设计数据库就像建造房子一样,没有详细的规划就开始建造可能会造成严重的后果,其中包括随着需求扩展数据库越来越庞大,维护困难,甚至推倒重来。
在设计数据库之前,首先要形成一个基于用户实际需求的概念模型,提取出用户使用场景中可能存在的所有的实体以及实体之间存在的关系。
基于以上提取到的实体以及实体之间的关绘制出ER图来,一副清楚的ER图有助于生成实际的数据库表。
Trunk
实体关系模型(E-R模型)
ER图其实总结来说就三个概念,实体属性和关系,先贴一张图。ER图就是基于这几个图案画出来的
数据库表设计的规范
数据库范式就是设计数据库的标准。 数据库范式是个老古董了, 1970s就被发明出来不断迭代到2003年的第六范式。
前三范式被广泛的接受和应用, 尽管受到nosql数据库的影响,范式还是数据库领域一个重要的标准。
此标准有助于减少数据冗余和提高数据库完整性
第一范式(1NF)
消除单个表中的重复组
单个表中的重复组我理解成就是在这个关系中对于主体来说是同样的一个玩意,举个例子假设有一个学生实体,数据如下
StudentId Name Age Course1 Course2 1 Caby 18 Computer Science Data structure 2 Caby 19 Computer Science Data structure
在这个学生选课关系中,课对于主体学生就是同样的玩意!所以不应该区分开对待 应该把Course1与Course2合并到同一个属性Course中。学生和课程的一对多关系不应该体现在同一张表上。
StudentId Name Age Course 1 Caby 18 Computer Science 1 Caby 18 Data structure 2 Caby 19 Computer Science 2 Caby 19 Data structure 为每组相关数据创建一个单独的表
不知道啥意思@_@ ?使用主键标识每组相关数据
参考这本书写着写着写不下去了, 这本书语言写的稀奇古怪的。。。不知道是笔者写的还是翻译写的!!差评
数据库范式参考这个链接, 这个清楚多了!!!
数据库设计三大范式
