Skip to content

ER图

E-R

E-R

Entity/Relationship

实体(方形):

  • 和table的设计不同, Entity的属性只包含和自己有关的部分. 如teacher表里有dept_name属性,但是E-R图里应该把dept拿出来做一个teacher和department之间的relationship

关系(菱形):

属性:

  • primary key加下划线,多值属性用{phone}这样代表一个集合
  • 实体的属性写在框里面relationship的额外属性,用虚线连出一个方框

image-20240404120046127

Constraints

mapping cardinality

一对一,一对多,多对一,多对多

  • ER图上用箭头表示,箭头指向"1"

或者也可以用l..r表示 1..*表示对应1~无数个。

image-20240404120153076

participation

  • total participation: 若一个实体集全部参与到关系中,要用两条线
  • partical participation 部分参与

Weak Entity set*

弱实体集weak entity set:一些实体集的属性不足以形成主键

  • 用于表示一些关系中的依赖性,弱实体集需要和强实体集关联才有意义 如course和section. section的主键是(course_id,sec_id,year),包含了course的主键course_id. 不存在没有class的section
    • 被依赖的强实体集叫做identifying entity set, 对应的关系叫做identifying relationship
    • 那么就把属于强实体集的属性course_id放到实体course里面, 弱实体section只存储其他的属性(用下划线标识,称为discriminator/partial key)
  • 经常出现在一对多的关系中,在ER图中需要用双菱形表示identifying relationship

Reduction to schema*

怎么把E-R图转化为sql的表

  • 每个实体集(矩形)都建一个表
    • 强实体集直接用原来的属性建表
    • 弱实体集=某个强实体集的属性+partial key
  • 每个关系(菱形)根据mapping判断
    • 多对多一定要单独建表advisor(s_id,i_id) 那就有student,instructor,advisor 3个表
    • 一对多: 大部分情况不建表,把"一"作为"多"的foreign key. 如[instructor]--<inst_dept>-->[department]. 那就instructor(dept_name) 但是单横线可能会引入null值, 如果不想要null值, 可以单独建表也可。
    • 弱实体集的identifying relationship不用建表(建弱实体集的表就可以了)
  • 组合属性: 取最底层的信息
  • 多值属性({}) 单独建表:每个值占一行。如一个老师有多个电话,建一个表phone(teacher_id,phone_number)

Aggregation

画一个框 看成虚拟entity (见作业题?)

Comments