【MySQL数据库教程天花板,mysql安装到mysql高级,强!硬!-哔哩哔哩】
【阿里巴巴Java开发手册】https://www.w3cschool.cn/alibaba_java
数据库设计是牵一发而动全身的。那有没有办法提前看到数据库的全貌呢?比如需要哪些数据表、数据表中应该有哪些字段,数据表与数据表之间有什么关系、通过什么字段进行连接,等等。这样我们才能进行整体的梳理和设计。
其实,ER模型就是一个这样的工具。ER模型也叫做
实体关系模型
,是用来描述现实生活中客观存在的事物、事物的属性,以及事物之间关系的一种数据模型。在开发基于数据库的信息系统的设计阶段,通常使用ER模型来描述信息需求和信息特性,帮助我们清理业务逻辑,从而设计出优秀的数据库。
可以看做是数据对象,往往对应于现实生活中的真实存在的个体。在ER模型中,在
矩形
来表示。实体分为两类,分别是强实体
和弱实体
。强实体是指不依赖于其他实体的实体;弱实体是指对另一个实体有很强的依赖关系的实体。
则是指实体的特性。比如超市的地址、联系电话、员工数等。在ER模型中用
椭圆形
来表示。
则是指实体之间的联系。比如超市把商品卖给顾客,就是一种超市与顾客之间的联系。在ER模型中用
菱形
来表示。
注意:实体和属性不容易区分。这里提供一个原则:我们从系统整体的角度出发去看,
可以独立存在的实体,不可再分的属性
。也就是说,属性不能包含其他属性。
在ER模型的3个要素中,关系又可以分为3种类型,分别是 一对一、一对多、多对多。
指实体之间的关系是 一 一 对应的,比如个人与身份证信息之间的关系就是一对一的关系。一个人只能有一个身份证信息,一个身份证信息也只属于一个人。
指一边的实体通过关系,可以对应多个另外一边的实体。相反,另外一边的实体通过这个关系,则只能对应唯一的一边的实体。比如说,我们新建一个班级表,而每个班级都有多个学生,每个学生则对应一个班级,一个班级对学生就是一对多的关系。
指关系两边的实体都可以通过关系对应多个对方的实体。比如在进货模块中,供货商与超市之间的关系就是多对多关系,一个供货商可以给多个超市供货,一个超市也可以从多个供货商那里采购商品。再比如一个选课表,有许多科目,每个科目有很多学生选,而每个学生又可以选择多个科目,这就是多对多的关系。
RDBMS的核心在于对实体和联系的定义,也就是E-R图(Entity Relationship Diagram),数据表越少,证明实体和联系设计得越简洁,既方便理解又方便操作。
字段个数越多,数据冗余的可能性越大。设置字段个数少的前提是各个字段互相独立,而不是某个字段的取值可以由其他字段计算出来。当然字段个数少是相对的,我们通常在
数据冗余
和检索效率
中进行平衡。
设置主键是为了确定唯一性,当一个字段法确定唯一性的时候,就需要采用联合主键的方式(也就是用多个字段来定义一个主键)。联合主键的字段越多,
占用的索引空间越大
,不仅会加大理解难度,还会增加运行时间和索引空间,因此联合主键的字段个数越少越好。
数据库的设计实际上就是定义各种表,以及各种字段之间的关系。这些关系越多,证明这些实体之间的冗余度越低,
利用度越高
。这样做的好处在于不仅保证了数据表之间的独立性
,还能提升相互之间的关联使用率。
“三少一多”原则的核心就是
简单可复用
。简单指的是用更少的表、更少的字段、更少的联合主键字段来完成数据表的设计。可复用则是通过主键,外键的使用来增强数据表之间的复用率。因为一个主键可以理解是一张表的代表。键设计得越多,证明它们之间的利用率越高。
这个原则并不是绝对的,有时候,我们需要牺牲数据的冗余度来换取数据处理的效率。