当我们在实体关系图(ERD)中绘制代表“关系”的线条时,图表仅呈现了外部形态。A与B之间存在一对多的关系。但这种A-B关系的本质究竟是什么?是构成关系吗?即A构成整体,每个B都是A的组成部分?B能否独立于A而存在?试想订单及其可能关联的多个订单项。若订单被删除,订单项也必须同步删除——二者存在 “相互依存” 的关系。抑或,这种关联并非构成关系,而是更为松散的引用关系?
每个A和B(或许可称为父子关系)都可能独立存在。例如客户与订单的关系:客户可能拥有零到多个订单,而订单仅关联零到一个客户。订单引用客户,但客户可独立于订单存在,订单亦可独立于客户存在,被引用的实体并不依赖于引用实体的存在。
更复杂的关系类型还包括:实体发出的关系线环绕回自身时,即形成递归关系。此类关系比想象中更为常见——物料清单便是典型示例:成品由完整清单中的原材料构成,因此所有材料列表最终指向自身。另一例子是员工关系:某员工可同时担任其他员工的经理。一对多关系中,单个员工可管理零到多个员工。
泛化是另一常见关系,常被称为“超类型/子类型”关系——高层次抽象版本关联着可能更具体的初始抽象版本。此关系有多种称谓,可称为抽象关系,甚至是“是一种”关系。例如:“汽车是一种交通工具”或“卡车是一种交通工具”。
此外还存在与泛化相反的关系,称为排他关系。在排他关系中,子实体可能拥有多个父实体。以文件为例:文件可能存在于文件夹中,也可能位于根驱动器上。文件“child”可能同时拥有驱动器和文件夹作为其直接“父级”。
当两个具体实体存在多重关联时,无论关联类型如何,这些关系都需要明确标识各自扮演的角色以实现区分。为何需要这种区分?在此情境下,外键列必须采用不同名称,理想情况下名称应能标识其所参与的角色类型。无论是仅有两项关系还是十余项关系,每项都必须谨慎标识,确保各方能准确辨别差异并正确使用。
人们往往低估自身认知的重要性。由于自身已知晓的事物,他们便认定他人必然理解相同意图,甚至认为最粗浅的观察者也能洞悉其中奥妙。可悲的是,这类认知往往大错特错。