《数据库系统概念》10-ER模型

通过建立实体到概念模型的映射,Entity-Relationship Model可以表达整个数据库的逻辑结构,很多数据库产品都采用E-R模型来表达数据库设计。

一、E-R模型采用了三个基本概念:实体集、关系集和属性

a)实体集

实体Entity相当于现实中的事物或对象,比如大学中的一个person就是一个entity,实体具有一系列属性,通过其中的某个或某几个属性可以唯一地确定这个实体,比如person_id。实体可以是现实中具体的事物,比如person、book,也可以是抽象的事物,比如money、course等。

实体集是一系列具有相同属性实体的集合,比如某所大学的所有教师构成了一个称为instructors的实体集。

实体集可以是相交的,假如persons实体集为学校中的所有人,则一个person实体可能是一个instructor实体或者一个student实体,或者两者都不是。

b)联系集

联系是指多个实体间的相互关联。比如可以定义教师A与学生B之间的联系advisor,这一联系指明A是B的导师。联系集是相同类型联系的集合,是n>=2个实体集直接的数学关系。实体集之间的关联称为参与(participate),联系也可以具有描述性属性(descriptive attribute),实体集instructor和student之间的联系为advisor,可以将属性date与该联系关联起来,表示教师成为学生导师的日期。

c)属性

每个属性都有一个可取值的集合,称为属性的域(domain)或者值集(value set)。Course_id的域可能是特定长度的所有字符串的集合,semester的域则可以是春夏秋冬四个季节。实体有多个属性,每个属性可以用属性名-值的键值对来描述,比如instructor的一个实体可以描述为:{(ID,7677),(name,Crick),(dept_name, Biology)}

属性的分类

简单属性与复合属性。简单属性无法再被划分为更小的部分,复合属性却可以。比如name可以进一步划分为first_name\middle_name\last_name。如果在一些场景下要使用整个属性,在另外的场景则只需要属性的一部分,则适合使用复合属性。复合属性有助于分组相关的属性,让建模更清晰。

单值属性和多值属性。

一般情况下一个属性只会有一个值,但有些多值的情况,比如phone_number,一个人可能会有多个电话号码。多值属性用花括号区分,,在适当的情况下,可以设置多值属性的上下界,比如设定phone_number的数目为1-2。

二、约束Constraints

a)映射基数(Mapping Cardinalities)

映射基数也称映射比率,表示一个实体统一联系集能关联的实体个数,常用于二元联系集。假设R为实体A-B之间的联系集,则映射基数有如下几种情况:

一对一(one to one),A的实体至多与一个B实体关联,反之亦然。

一对多(one to many),A的实体可以与任意多个B实体关联(>=0),B实体则只能与至多一个A实体关联。

多对多(many to many)。A和B实体间相互关联的数目不受限制。

b)参与约束(Participation Constraints)

如果实体集E中的每个实体都参与到联系集R的至少一个联系中,则E在R中的参与是全部的(total),否则为部分的(partial)。比如A-B为一对一映射,A中的实体数多于B,则A部分参与,B全部参与。

三、E-R模型转换为关系模型

a)转换具有简单属性的强实体集

假设E是具有简单描述性属性a1,a2..的强实体集,可以转换为具有同样属性的关系模型E,它的一个元祖对应实体集中的一个实体,主键也是实体集E的主键。

b)转换具有复杂属性的强实体集

对于复合属性,转换时需要为每个子属性创建单独的属性,比如将name拆分为first_name, middle_name, last_name;对于多值属性,需要使用多个元祖来表示,比如ID为22的教师的phone_number有555-1234与444—4321,则对应两条元祖(22, 555-1234)与(22, 444—4321),这两个属性共同构成了主键。

c)转换联系集

联系集也转换为关系模型,所有参与联系的实体集的属性和联系集的描述性属性构成了转换的模型的属性。关于主键,对于多对多的二元联系,主键为参与联系的实体集的主键的并集;对于一对一的联系,可使用任意一方的主键;对于多对一的联系,选择“多”端的主键。

学习资料:Database System Concepts, by Abraham Silberschatz, Henry F.Korth, S.Sudarshan

本文来自企鹅号 - 菜鸟程序员成长记媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏行者常至

009.python科学计算库seaborn(中)

版权声明:本文为博主原创文章,允许转载,请标明出处。 https://blog.csdn.net/qwdafedv/article/deta...

392
来自专栏marsggbo

使用numpy解决图像维度变换问题

在机器学习中经常会碰到各种图像数据集,有的是按照num*height*width*channel来存储的,而有的则是num*channel*height*wid...

401
来自专栏null的专栏

机器学习算法实现解析——libFM之libFM的训练过程之Adaptive Regularization

本节主要介绍的是libFM源码分析的第五部分之二——libFM的训练过程之Adaptive Regularization的方法。 5.3、Adaptive Re...

4007
来自专栏Python数据科学

Seaborn从零开始学习教程(三)

当处理一个数据集的时候,我们经常会想要先看看特征变量是如何分布的。这会让我们对数据特征有个很好的初始认识,同时也会影响后续数据分析以及特征工程的方法。本篇将会介...

551
来自专栏iOSDevLog

估计器接口小结摘自:《Python 机器学习基础教程》 第3章 无监督学习与预处理(三)

scikit-learn 中的所有算法——无论是预处理、监督学习还是无监督学习算法——都被实现为类。这些类在 scikit-learn 中叫作估计器(estim...

462
来自专栏决胜机器学习

神经网络和深度学习(二) ——从logistic回归谈神经网络基础

神经网络和深度学习(二)——从logistic回归谈神经网络基础 (原创内容,转载请注明来源,谢谢) 一、概述 之前学习机器学习的时候,已经学过logisti...

3807
来自专栏marsggbo

【TensorFlow】tf.nn.softmax_cross_entropy_with_logits的用法

在计算loss的时候,最常见的一句话就是 tf.nn.softmax_cross_entropy_with_logits ,那么它到底是怎么做的呢?

381
来自专栏瓜大三哥

matlab神经网络1

神经网络的通用函数 一、神经网络仿真函数 [Y,Pf,Af,E,Perf]=sim(net,P,Pi,Ai,T) 其中,参数Y为网络的输出;Pf表示最终的输入延...

2198
来自专栏AI科技大本营的专栏

福利 | Keras入门之——网络层构造

《Keras快速上手:基于Python的深度学习实战》系统地讲解了深度学习的基本知识、建模过程和应用,并以深度学习在推荐系统、图像识别、自然语言处理、文字生成和...

3515
来自专栏null的专栏

机器学习算法实现解析——libFM之libFM的模型处理部分

本节主要介绍的是libFM源码分析的第三部分——libFM的模型处理。 3.1、libFM中FM模型的定义 libFM模型的定义过程中主要包括模型中参数的设置及...

4169

扫码关注云+社区