答案 0 :(得分:1)
显然你正在关注像http://www.javaguicodexample.com/erdrelationalmodelnotes.html这样的事情:
1-M关系规则:每个1-M关系成为与子类型(Crow's Foot符号附近的实体类型)对应的表中的FK。如果关系父端的最小基数为1,则FK不能接受空值(必须使用NOT NULL)。
您的ER [sic]图样式为设计的每个表都有一个框,其中表表示应用程序实体类型的实例。 (可能是关联实体类型,其关键是一组其他实体ID。)在原始ER建模中,“关系”是实体之间的关联;但是在你的伪ER图中,“关系”以混淆的方式使用,有时指的是关联,有时指的是FK(外键)。
如果“父”实体类型与“子”实体类型具有1对多(业务/应用程序)关联/关系,那么我们可以根据“基本1:M规则”对其进行建模。我们在子表中添加一个NOT NULL FK列,给出子的父ID。但是如果关联/关系是0或1对多,即可选1对多(即,以前的孩子不必拥有父级,即父级是可选的),那么我们可以建模根据“可选的1:M规则”。我们向子表添加一个NULLable FK列,该子列给出子的父ID,如果没有父,则为NULL。
初步设计:
-- T identifies a thing with property ...
thing(t, ...)
-- W identifies a whatsit with property ...
whatsit(w, ...)
现在我们希望能够以1对多关系/关联记录参与者my_1_to_many(t1,w)和0或1对多关系/关联my_0_or_1_to_many(t0,w):
-- T identifies a thing with property ...
thing(T, ...)
-- W identifies a whatsit with property ...
-- AND my_1_to_many(T1, W)
-- AND (my_0_or_1_to_many(T0, W) OR T0 IS NULL AND NOT my_0_or_1_to_many(T0, W))
whatsit_plus_associated_things(w, ..., t1, t0)
NOT NULL t1
NULL t0
FK (t1) references thing (t)
FK (t0) references thing (t)
(您可以看到为什么NULL与仅具有无空表whatsit(w, ...)
,my_0_or_1_to_many(t, w)
和my_0_or_1_to_many(t, w)
相比,使设计复杂化。)