学习实体关系图的设计

你好 本文专门介绍一种最受欢迎​​的,也是许多熟悉的设计模型-ER( 实体关系 ),该模型是计算机科学领域的科学家Peter Chen于1976年提出的。

图片

在本文的过程中,我们将使用简单的语言,使用生活中的简单示例,来开发图表的不同版本,具体取决于它们的连接类型。 让我们开始吧!

面向对象设计


首先,我想对OOP(面向对象的编程/设计)说几句话,以便理解图本身的范例没有问题。 对于我来说,使用OOP原理抽象该模型更为方便,在该模型中,本质是对象,属性是其特征,而连接是中介(在某些情况下,是一种方法)。

快速上手


实体关系设计模型的主要优点是通用。 您可以设计数据库(数据库),程序的操作,交互原理等。

在研究开始时您需要了解什么?

-首先,您需要知道主要工作是在本质和沟通的关系上进行的。 为了更容易理解,值得记住的是,本质是矩形中的名词 ,而连接是菱形中的动词 。 这是一个例子:

图片

我认为您了解什么。 我们的程序员教Python。 似乎一切都是合乎逻辑的。 但是在这里,示例中的这些单位是什么?

-这是连接类型的指示器! 在此示例中,连接类型为一对一:

11


我们将返回通讯类型,但是稍后,现在我们需要解析另一个BUT:
-图表应双向读取。 如果您从左到右阅读,那么一切都是逻辑的,如前所述,但是相反的话……那么我们将再思考几次逻辑是什么。 确实,它是以这种方式写的,这是正确的! 这只是该模型的某些功能之一,有时可能会造成混淆。 但是,没有什么可以像在许多示例中一样阻止您在设备端添加箭头,如下例所示:

图片

PS我希望你有兴趣。 您可以在图编辑器-Dia中创建此类图。

属性


因此,我们有一个程序员,但我们对他一无所知...没有它,程序员不是程序员吗?
-没有任何属性!

让我们补充示例:

图片

是的,属性并不能真正使我们的程序员与普通人区别开来……但是将来,我们将使用新的属性来修复它! 在我看来,该属性是数据库表中的COLUMN(列)。

属性为空

如果没有必要在数据库表中指明姓(那么该属性将是可选的),则该属性应由两个椭圆组成:外部和内部(在其中,属性名称)。

识别属性

您可能会在图中看到属性名称的下划线-这是正常现象。 您不必担心,也许这只是一个识别属性。 也就是说,它是必须始终填写的属性,这是必需的(主键)。 例如-众所周知的ID。

好了,现在我们需要给程序员知识(他所知道的语言,技术)。
“但是我们不会立即用每个单独的属性列出他的知识成分吗?”
没错,我们将使用一个复合属性( 一个由组件属性组成的属性)! 我想指出,属性组件也可以是复合的。 唯一的问题是如何实现它。

图片

交流类型


太好了 我们能够弄清楚这一点。 现在考虑剩下的通信类型!

让我们继续连接的类型-一对多:

1N


让我给你看一个例子:

图片

现在,我们的程序员也在研究Perl。 还不错
但是,我想指出的是,上面的示例只是一个例外,为了清楚地表明关系是什么,因为可能有上千个分支,绘制起来很愚蠢。 将来,我们将返回一个简短而正确的记录,这种脆弱的模式值得记住,因此人们对什么是一个大致的了解。 我希望我能向您解释“一对多”连接类型的含义。
*一个实体与多个实体的比率,反之亦然*

在继续研究链接类型之前,您应该发现链接中也存在属性
我不会举例说明-也许可以用语言毫无问题地理解它。 试想一下,您有一个交易连接。 假设在您的项目中,您需要保存有关已保存交易的所有信息,无论是保存到文件还是数据库,都没有关系。 您需要节省时间,异常(发生的错误)等。 在我们的例子中,以上所有都是属于连接的属性。 这样的属性也可以是复合的,标识的,可选的。 问题仅在于实施。 让我们继续。

最后一种连接类型仍然存在-很多:

MN


像往常一样,我将通过示例(而不是通过程序员)向您展示,在任何观看电影的服务上以观众与电影的关系为示例:

图片

有两个有争议的问题。 让我们开始吧。

第一:
-为什么沟通更像实体?
为了简化“多对多”类型的关系,使用了中间实体

“为什么没有分支?”
-观众可以订阅许多电影。
-电影可以吸引许多观众订阅。


现在,让我们看一下实现多对多关系的另一种方法,这将使编写起来有些困难,但对于那些不了解中间实体的人也许更容易理解:

图片

您可能已经注意到,在此示例中,存在一种类型的连接“一对多”,甚至多个。
这是事实,很容易解释。 事实是,“多对多”连接类型等于两个“一对多”通信。

MN=1N+N1


您可能对为什么我们在连接和实体之间有两个优势感兴趣。
这已经很难解释了。 请仔细阅读。
事实是,存在可选强制连接 。 记住身份:
可选连接创建部分参与,而强制连接创建完全参与。

-什么是部分和完全参与?

部分参与也是例外之一,有点类似于可选属性,它仅取决于实体。 想象一下图片。 有两个实体:
买方和产品。 连接类型-一对多。
他们有一个共同的联系-购买。 但是,我们需要了解其他内容。 没有它,买主不是买主?
-至少没有一次购买!
此案例代表部分联系,因为我们可以选择“购买并成为买家或拒绝”。 在这种情况下,我们在链接“购买”和实体“产品”之间会有一条边。 现在考虑全面参与。

没有选择的情况下就是充分参与。 即使我们不学习任何东西,我们的程序员也仍然会是程序员,这是由于我们根据图表确定他必须学习一些东西,并且没有例外。 我们通过两个方面来解决这个问题。 参与的类型取决于您的设计方式,以及在交流阶段是否需要抽样。
完成了 我们继续。

请记住“一对多”的示例,其中在“ Teaches”链接之后是YP(编程语言)的名称,该名称导致了很多分支,因为在编写方面这是不正确的。 试想一下,因为我们不必为每个PL做分支。 我们可以简单地创建一个实体“编程语言”,在其中放置将负责其名称,年龄,能力等等的属性。 我想你明白。 我建议您使用缩写词“多对多”。

弱实体


考虑最后的概念。

假设您有一个表“ Parent”和“ Child”,它们在图中分别具有相同的实体。 一个可以没有另一个存在吗? 我认为不是。 在生物学和一般逻辑上。
弱点:没有苹果树就没有苹果


在此示例中,实体“子”是一个弱实体。
弱实体是没有另一个实体就无法存在的实体。
我们创建实体“ Child”,以希望“父/母”不具有相同名称的子代,否则,我们的实体(可以是数据库中的表)几乎不能称为Normalized (在该表中,Data Automation和有一个主键标识符),因为我们不能特区分孩子。

但是,确实会发生这种情况,但是您可以通过添加其他属性来解决此问题。 在这种情况下,“名称”属性就是造成类似情况的原因,它被称为弱实体关键组成部分 。 此类属性的名称用椭圆形下划线标有椭圆形,其实质和联系放在组成它们的其他图中。

我将以这个为例:

图片

结论


总而言之,我想说的是,一项基本胜任的合作工作是对任务的良好解释,对需要开发的产品的良好展示,这有助于设计模型。 实体关系是一种流行了数十年的设计模型。 它使您可以构建精美的图表,并通过正确的方法在将来进行补充和修改。 花时间学习。 感谢您的关注!

资料来源


-图书《 MySQL指南》作者:
Seyed M.M. “ Saied” Tahagghoghi,休·威廉姆斯
-en.wikipedia.org/wiki/Entity –relationship_model

Source: https://habr.com/ru/post/zh-CN440556/


All Articles