我读过两种情况:一种是完全参与的关系,另一种是识别关系,即一个实体没有另一个实体存在。
我还读到过这样一篇文章:“并非所有的参与都意味着一种认同的关系”。
他们之间有什么区别?
发布于 2017-08-07 15:13:28
你对定义的尝试太模糊了,没有用。
当然,任何实体都必须存在才能参与一种关系,并且它所参与的一个或多个实体必须存在。不要将此与需要另一个实体类型存在的实体类型混淆。
当第一种类型的每个实体必须参与时,第一种实体类型完全参与与第二种实体之间的关系。一种类型的总参与可以是1:1、多:1或多:多。放弃关系或其整体可能会给以前完全参与的实体仍然存在的设计,可能参与其他关系。
区分关系是第一/子实体类型和第二/父实体类型之间的区别关系,其主键包括在第一/子实体的主键中。其结果是,儿童实体完全参与了识别关系。子类型的总参与度为1:1或多:1。删除总体或关系需要删除子实体类型和它所参与的任何其他关系。
如果我们不改变主键&实体之间的对应关系,那么只要一个子实体存在,它就与同一个父实体相关联。然而,一些不确定的关系可能有关联,只要一个完全参与类型的每一个实体至少参与一次。
呃建模是相当随意的。任何标识关系&它的子实体类型都可以被设置为总计多个:1非参与关系。但是,这种设计不会使子类型对父类型的存在依赖性变得显式。
发布于 2017-08-23 06:46:03
如果您从参与的角度来看关系,则存在参与约束,该约束指定实体类型(例如A)的存在是否取决于它是否通过关系类型与另一个实体类型(例如B)相关。
此约束指定每个实体可以参与的关系实例的最小数目,有时称为最小基数约束。有两种类型的参与constraints—total和局部。
著名的员工示例:“每个员工都必须为部门工作。”
也就是说,员工实体只有在参与至少一个WORKS_FOR关系实例时才能存在。
因此,员工在WORKS_FOR中的参与被称为完全参与(即存在依赖关系),这意味着员工实体集合中的每个实体都必须通过WORKS_FOR与部门实体相关联。
现在,在上面的例子之后,部分关系是不言自明的。
在确定关系时,我们首先需要熟悉弱实体类型:
没有自己的关键属性的实体类型称为弱实体类型。
因此,通过与来自另一实体类型的特定实体相关联来识别这些实体,并结合它们的属性值之一进行识别。
我们将此另一种实体类型称为标识(或所有者)实体类型,并将将弱实体类型与其所有者关联的关系类型称为弱实体类型的标识关系。
关键是:
弱实体类型对于其标识关系始终具有完全参与约束(存在依赖关系),因为没有所有者实体就无法识别弱实体。
但是,并不是每个存在依赖关系都会导致弱实体类型。与上面的示例一样,员工实体类型不能存在,除非它与部门实体类型相关,即使它有自己的键(Employee_ID),因此不是弱实体。
因此,为了确定关系,弱实体是必须的(因此有完全参与),但是,全面参与并不意味着识别关系,因为它可能没有上述例子所述的弱实体。
希望它有所帮助,如果你有任何争论,请随时发表评论。
所有参考资料均来自: 数据库系统基础(第6版) Ramez Elmasri,Shamkant B.Navathe ISBN 13: 978-0-136-08620-8
https://stackoverflow.com/questions/45549043
复制