如何设计数据库?E-R图帮助你从无到有

关系数据库建模

  数据库建模是指针对一个给定的应用环境构造数据库模式,建立数据库及其应用系统,能够有效地存储数据,满足用户的应用需求。明确Web系统的业务需求后,关系数据库建模通常由以下两步完成。

  • 设计E-R图:构造一个反应现实世界实体之间关系的模型。
  • 关系表设计:将E-R图转换为关系表,并定义列类型,建立主键、外键等各种约束。

1. 设计E-R图

  E-R图,即实体-关系(Entity-Relationship)图。

  • 实体:客观存在的事物、事件、角色等,如老师、订单
  • 实体属性:用于描述实体的特性,每个实体可以有多个属性。比如老师的性别、年龄等
  • 关系:反应两个实体之间客观存在的关系

实体关系分为以下3类:

  • 一对一关系:实体A至多只有一个实体B与之关联,实体B至多只有一个实体A与之关联。例如:人和身份证、你和女朋友
  • 一对多关系:实体A可以有零个、一个或者多个实体B与之关联,而实体B之多只有一个实体A与之关联。例如:人与银行卡
  • 多对多关系:实体A可以有零个、一个或者多个实体B与之关联,且实体B可以有零个、一个或者多个实体A与之关联。例如:学生和课程

  在E-R的绘制中,常用方块表示实体,实体周围的圆圈表示属性,实体之间的菱形表示关系。
学校系统的E-R图示例

上图中定义了4个实体和3个关系

四个实体:老师、课程、学生、学生证

三个关系:
课程与学生多对多
学生与学生证一对一
课程与老师一对多(学校规定一个老师只能教一门课,一个课由多个老师来教)

2. 关系表设计

  完成了E-R图设计之后,可以进行关系表的具体设计。

  • 数据库选型,例如MySQL、SQL Server、Oracle、PostgreSQL等。
  • 将每个实体转换为一个数据表,将实体的属性转化为该表中的列,为每个列定义相应的数据类型。
  • 对于有1:1关系的两个表,为两个表设置相同的主键列。
  • 对于1:N关系的两个表,在N表中添加一个外键列,该项与1表的主键相关联。
  • 对于M:N关系,生成一个单独的表表示该关系,该关系的列由两个表的主键组成。
  • 重新审查所有的表,对需要的地方添加约束,对常用的条件字段设置索引。

通过上述步骤,生成4个实体表和1个关系表。
课程表
课程表
老师表
老师表
学生表
学生表
学生证
学生证
enroll
选课
  在以上表定义中,注意关系的表达方法。

  • 表student和表card通过设置相同的主键(student_id)实现了1:1的关系
  • 表teacher中通过设置外键course_id实现了与课程1:N关系
  • 表enroll实现了“学生”与“课程”的M:N关系

参考自《Python高效开发实战》刘长龙著

发布了56 篇原创文章 · 获赞 8 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/Dawn510/article/details/100972000