数据库的实体关系图(实体、属性等)及其示例

3
我有一个关于数据库的介绍课程,并且被分配了一个非常简单的任务,目的是熟悉SQL数据库的术语。
例如,通过对“实体”的定义,我被要求确定一系列对象中哪些适合这个类别(即哪些是实体,哪些是属性等)。唯一让我困惑的是:某人可能阅读的特定书籍中的“使用的课程”。
我的第一个想法是,这肯定是一个实体,因为它可以通过属性进行明确的标识,例如班级大小、所需技能、联系时间等。然而,我并不完全自信,但逻辑似乎是正确的。
我对第二部分有点困惑,涉及根据所需的英文描述构建ER图。描述如下:
“为实体'building'绘制实体表示,其中包括建筑名称、占用情况以及是否有电梯(是/否)。将建筑实体装饰成包括建筑管理员的名字(名、中间名、姓)。向建筑实体添加多值属性。”
我解决的解决方案如下: 扩展同样的问题,如下所示:
“再次装饰建筑实体,包括清洁工人的名字(仅限名字)”
由于管理员是清洁工作人员的一员,我认为可以通过添加“清洁工作人员”属性来连接“管理员”和其他“清洁工”。然而,我最终这样做是因为并非每个“清洁工作人员”都是管理员。
有什么想法吗?

关于属性与实体:我认为这取决于设计师的决定。例如,电话号码是属性还是实体?可能两者都可以。如果是实体,则区号、前缀和最后四位数字是属性。颜色也是如此。如果它是实体,则其红色、绿色和蓝色组成部分就是属性。 - Yuck
1个回答

3

缺陷

可能存在一个缺陷:我猜测“清洁工人员”应该是一个双圆,如果这意味着分配了一个或多个实例。您可能会混淆员工集合和个人概念。更好的名称为该实体/表可能是“清洁工人”或“清洁工人员”,双圆表示您可以有多个员工。员工(集合)是所有“清洁工人”实例。因此,“员工”一词/概念不需要出现。说您可以拥有多个实例确实意味着您可以拥有集合。

再次强调...“清洁工人”属性可能是姓名、电话、员工ID、照片。显然,这些是每个清洁工人实例的属性。每个人只有一个姓名和一个照片(ID徽章证件照),因此在它们上面是单圆,但在“清洁工人”上是双圆。

如果我站在你旁边,讨论这张图表,我可能会指着“Janitor Person”双圆圈,并在谈话中说出“staff”。但我并不是字面上的意思。相比之下,如果一个图表实际上有一个带有“Staff”一词的双圆圈,那就意味着我们正在将员工集合表示为一个整体,并且我们有多个这些人的组。这可能是在业务场景中的情况。想象一家拥有工会工人的企业,比如一家酒店。客房服务员可能都是一个“Staff”实例(一起),而厨师和厨房工人可能是另一个“Staff”实例。每个实例都会记录自己特定的(不同的)代表该“Staff”的工会组织。
乌鸦脚图示法
我不熟悉那种图示技术。我更喜欢顶部是实体/表名称,下面列出属性/列的UML风格框,由Crow's Foot Notation连接(这对IT行业来说是一个异常好的名字!)。
这是我的风格,我对此的看法。这个图表既可以作为关系数据库表设计,也可以作为ERD。第一个图表遵循了问题描述中对单个主管跟踪的要求,代表了一对一的关系。如果您可以有一个没有当前分配主管的建筑物,那么连接到“主管”的那条线应该是零或一的符号,而不是一个符号。如果您添加历史元素,也就是说,如果您想追踪过去和未来的主管以及目前分配的主管,则我们有一个一对多的关系。这种情况在第二个图表中显示。线条不同,并添加了两个属性来跟踪人员担任主管的开始和结束。

A pair of ERD table-design diagrams


我也对一个实体拥有另一个实体的概念感到困惑。也就是说,楼房有保安,后者又有你列出的信息。一个属性能够拥有另一个属性吗?或者在这一点上它是否应被视为一个实体(例如Building-> BrickType,可以扩展到类似Building -> BrickType -> Color的东西)。在这种情况下,BrickType是属性还是实体? - sherrellbc
正如其名称所示,实体与关系处于同一级别,而关系连接实体(请参考维基百科文章中的陈符号表示法,该表示法非常全面)。陈先生的想法是,不仅自然语言实体(建筑、看门人、姓名)可以具有属性,而且它们的关系也可以具有属性(建筑物有3个看门人,因为……)。关系的符号是一个菱形。双圆圈只表示一个实体中出现多次的属性(从未使用过,因为您无论如何都必须将其转换为关系模型)。 - Jürgen Zornig
我更喜欢将“清洁工”和“管理员”都作为实体,其中“管理员”与“清洁工”具有“is-a”的关系,而每个人都与建筑物具有“has-a”的关系,其中“管理员”的多重性为1,而“清洁工”的多重性则为多个。如描述所述,“清洁工”人员的名称也可以被建模为多值属性(尽管我不理解为什么应该以这种方式进行建模……电话号码是多值属性的更好示例)。 - Jürgen Zornig

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接