|
|
1
1
用CQL书写 see the ActiveFacts home page ,您需要这样的子集约束:
注意,如果在每个方向上都包含一个读数,这将变得更加流畅。 在NORMA中,需要具有两个角色对的子集约束: 子集对是“EntityDescriptor引用商品”的两个角色。 超集对是EntityDescriptor在“EntityDescriptor用于CommodityCategory, 商品在“商品是商品范畴”中的作用。 注意,每对的第一个角色由同一类型(EntityDescriptor)扮演, 同样,每一对(商品)的第二个角色。也可以使用兼容的子类型/超类型,但这些类型必须以这种方式兼容。 相等约束就像两个子集约束,每个方向上运行一个子集约束。它总是要求至少有一个引用存在,只要一个实体描述符是针对某个商品类别的,并且该商品是该商品类别的, 反之亦然 . |
|
|
2
1
我们不能在 属于 和 是为了 ,因此每个商品到类别都是实体描述符到类别的子集 表如下:ED(EntityDescriptor)、CC(CommodityCategory)、CM(Commodity)
所以我们可以看到CC有两个角色( r1级 )和到厘米( r2型 ),那个 r2型 是的子集 r1级 . 所以我认为商品对ED没有直接的约束作用,而是通过CC应用的约束。 |
|
|
3
0
如果要强制使用数据库,我建议在插入/更新触发器之前使用该数据库,以防止将EntityDescription与不匹配的商品关联起来。 如果你想使用代码,我建议你学习 Specification Pattern . 假设一个Commodity、EntityDescriptor和CommodityDescriptor类。CommodityDescriptor将是其他两个类的组成部分。商品将包括一个规范,比如matchingcommitteydescriptionspecification(是的,它很冗长)作为其组成部分。然后,当调用Commodity.setEntityDescription(EntityDescription-entityDescriptor)时,它通过比较Commodity和entityDescriptor的CommodityDescriptor值来根据规范进行验证。 |