Database design 可选择参与数据库设计和crow';s脚符号

Database design 可选择参与数据库设计和crow';s脚符号,database-design,relational-database,relationship,entity-relationship,optional,Database Design,Relational Database,Relationship,Entity Relationship,Optional,考虑到以下关系: 出租车->有->路线->驾驶人->指定运输 从路线到分配的_运输的关系是零、一还是多(即可选参与的一对多连接,还是是一对多(即强制性参与而非可选参与) 也就是说,我不理解选择性参与,你能正确地争辩说,当出租车公司新分配路线时,在给定的时间点,它很可能还没有分配给它的交通工具(当然以后肯定会)。这就是你正确地争辩选择性参与的方式吗 基本上,我对如何判断两个实体之间是否存在可选参与感到困惑 我想相反,您也可以争辩说,如果在分配的_传输表中有一个实体实例,您会期望分配的_传输实例被分

考虑到以下关系:

出租车->有->路线->驾驶人->指定运输

从路线到分配的_运输的关系是零、一还是多(即可选参与的一对多连接,还是是一对多(即强制性参与而非可选参与)

也就是说,我不理解选择性参与,你能正确地争辩说,当出租车公司新分配路线时,在给定的时间点,它很可能还没有分配给它的交通工具(当然以后肯定会)。这就是你正确地争辩选择性参与的方式吗

基本上,我对如何判断两个实体之间是否存在可选参与感到困惑

我想相反,您也可以争辩说,如果在分配的_传输表中有一个实体实例,您会期望分配的_传输实例被分配到一个特定的路由(否则,如果没有路由,分配传输就没有意义!)…因此,指定的_传输将是强制性的,而不是可选的

所以我不确定哪一个逻辑正确

我在正确的轨道上吗


感谢您的帮助。

概念/逻辑模型和物理模型之间有一个区别需要记住

在物理模型中,一对多的子端几乎总是可选的,除非由于声明性引用完整性约束,在父对象被持久化之前,您不能插入子对象。这可能有例外,但通常在插入任何子对象之前插入父对象。因此在短暂的一瞬间,父母没有孩子

在概念模型或逻辑模型中,重点是记录业务规则。业务规则不需要考虑RDBMS的技术限制。因此,如果业务规则表明没有子项父项就没有意义,您可以自由地对一对一或多个关系建模


在你的例子中,很难说,因为我不知道你的业务规则。如果没有人驾驶某条路线,该路线实际存在吗?这是你在建立概念模型和逻辑模型时必须决定的。当你建立物理模型时,你几乎肯定会有可选的指定运输参与n仅仅因为您的DRI。

谢谢Joel。有一个问题,当您断言一对多的子端几乎总是可选的,如果我理解正确的话,解释了这是声明性引用完整性约束的结果,这难道不使一对多的子端成为强制参与而不是操作吗因为除非父实体存在,否则无法添加子实体?因此,您所说的与您所提到的“在一瞬间,父实体没有子实体”不一致?如果您不能在没有父实体存在的情况下首先添加子实体,怎么会发生这种情况?此外,我将宣布,是的,路线是正确的(仅定义起点和终点位置)事实上,即使没有人驾驶路线,也会存在,因此,分配的_交通工具是否因此成为路线的可选?如果我在商业规则中说过,如果没有人驾驶路线,路线将不存在,这是否仍然意味着它仍然是可选参与,因为如果没有人驾驶路线,这只是我的选择表明子级没有实体出现,这是正常的,不是吗?(因为父路由存在,所以没有违反DRI)我被误导了吗?@Restricted-相反,一对多的子端在物理模型中通常是可选的。请记住,乌鸦脚图中的基数必须从相关实体的参考框架中读取。子对象看到的是强制父对象,因为在父对象出现之前,您无法拥有子对象(外键约束如是说)。同时,父级将子级视为可选的,因为在添加任何子级之前,必须首先存在父级。如果您定义了路线,无论它们是否被驱动,那么是的,则具有零分配的_传输的路线记录是有意义的,因此分配的传输是可选的。另一方面,如果您说一条为n的路线任何驱动都不感兴趣(即不会存储在数据库中),然后分配传输(至少在逻辑上)路由是必需的。如果家长有基数0,当且仅当孩子有基数0,则这不是可选性。谢谢。您的第一个回答完全有道理,我完全理解。但是,关于您在第一个回答之后的后续回答的最后一句话,您是否有进一步的示例或参考有没有更多的例子来充分阐明这一点?我仍然无法完全掌握参与概念到令人满意的程度。此外,目前我只关注概念模型。