关系型数据库(四)数据库的设计-各种关系-er图
为什么要先设计不直接编码按照项目的正规流程必须先设计再开发必须先出设计方案经评审会议审核通过才能进行编码开发而且设计文档也是交付项目客户付款的必要条件之一。而且先进行设计也是为了我们理清思路的必要条件我们说真正的开发中设计占到80%的时间或者更多写代码占到20%左右时间看一下数据中台数据库设计的实际例子数据库设计最终目的就是如何将需求转换为二维表的过程。和java里建类一样Java工作中如何使用数据库的例子以酒店管理系统举例首先我们有了展示歌手信息的需求有了管理歌手信息的需求那么我们需要把需求中的歌手转换为抽象成实体信息 为歌手建模1.明确歌手有哪些属性歌手和其他实体有没有关联。2.画出歌手的ER图实体关系图 3.根据ER图建表4.使用JAVA程序连接数据库用程序来调用歌手信息数据库设计首先将现实世界的类抽象成实体建立ER图建表专业的ER图工具有 PowerDesigner Microsoft Office Visio我经常使用的是https://www.processon.com/ 在线工具ER举例实体 用户就是一个实体ER图中用矩形表示实体中的属性 用与实体相连的椭圆表示实体中的主标识 比如 用户编号属性下面加下划线表示能够代表这个用户的唯一性4.实体间的联系也叫关系实体间的关系通常有1对1(1:1)1对多(1:m)多对多(m:n)等一对一一对一关系是指对于实体集A与实体集BA中的每一个实体至多与B中一个实体有关系反之在实体集B中的每个实体至多与实体集A中一个实体有关系。公民和身份证号就是1对1的关系男女朋友就是一对一关系一对多一对多关系是指实体集A与实体集B中至少有N(N0)个实体有关系并且实体集B中每一个实体至多与实体集A中一个实体有关系一个班级有多个学生班级和学生就是1对多的关系班级是1方学生是多方用1n或是1:m表示单位和职员它们的关系就是1:n一个单位可以有多个职员分类和商品它们的关系就是1:n一个分类有多个商品多对多多对多关系是指实体集A中的每一个实体与实体集B中至少有M(M0)个实体有关系并且实体集B中的每一个实体与实体集A中的至少NN0个实体有关系。课程和学生就是多对多关系一个课程有多个学生选一个学生可以选多个课程关系用m:n 或用m:n,或用n:n例子问题描述一个学生可选修多门课一门课有若干学生选修一个教师可讲授多门课一门课只有一个教师讲授一个学生选修一门课仅有一个成绩。学生的属性有学号、学生姓名教师的属性有教师编号教师姓名课程的属性有课程号、课程名。ER图画完我们就要设计表结构关系模式 表的逻辑结构和特征的描述E-R图转换为表的规则每个实体转化为一张表Employees实体的主标识EID称为主键组合属性Address,city street state 三个属性 将其子属性转化为表中的属性多值属性Hobbies 一个人的爱好有多个 称为多值属性和实体的主标识属性组合转化为一张表通过EID和Employees表关联1.1:1的联系不必引入关系表将关系的属性(allowance)及非多方(1.老师表)的主标识tid加入到多方表(m 课程表)多方表的外键是非多方实体的主标识外键就是在一个表中引用了另一个表的主键tid3.对于M:N多对多的关系我们要引入关系表中间表将关系的属性及两个实体的主标识id形成关系表。关系表的主键为两个实体主标识的组合 主键就是唯一标识这条数据的值例2