问题描述
表格:group
,target
,subgroup
,subgroup_target
group
有很多target
group
有很多subgroup
subgroup
有很多subgroup_target
target
有很多subgroup_target
我要强制执行的关系是,subgroup
的{{1}}数始终与其拥有的subgroup_targets
的{{1}}相同。换句话说,如果一个group
有5个targets
,则每个group
也必须恰好有5个targets
。此外,在给定的subgroups
中,每个subgroup_targets
必须对应一个不同的subgroup
(它们基本上是每个{{1} } subgroup_targets
)。您可以将target
看作是掩盖subgroup's
拥有的group's
数组的数组。
是否有一种方法来约束数据,使得targets
不能存在,除非其相应的subgroup_targets
也是如此?例如,如果一个targets
有多个group
,并且为此target
插入了一个新的subgroup_targets
,那么,如果有一个新的{还没有为每个group
subgroups
插入{1}}。
下面您将找到我对该架构的初步设计。如您所见,它允许为target
添加group
,而无需为每个subgroup_target
group's
添加相应的链接到其的subgroups
。 / p>
target
解决方法
-- Group GRP exists.
--
group {GRP}
PK {GRP}
-- Subgroup number SG# of group GRP exists.
--
subgroup {GRP,SG#}
PK {GRP,SG#}
FK {GRP} REFERENCES group {GRP}
-- Target TGT exists.
--
target {TGT}
PK {TGT}
-- Group GRP is targeting target TGT.
--
group_target {GRP,TGT}
PK {GRP,TGT}
FK1 {GRP} REFERENCES group {GRP}
FK2 {TGT} REFERENCES target {TGT}
-- Subgroup number SG# of group GRP
-- is targeting target TGT.
--
CREATE VIEW subgroup_target (GRP,SG#,TGT)
AS
SELECT a.GRP,a.SG#,b.TGT
FROM subgroup AS a
JOIN group_target AS b on b.GRP = a.GRP ;
注意:
All attributes (columns) NOT NULL
PK = Primary Key
FK = Foreign Key
Using suffix # to save on screen space.
OK for SQL Server and Oracle,for others use _NO.
For example,rename SG# to SG_NO.