1

object-role-modellingを使用して概念をモデル化しようとしていますが、必要な制約タイプが見つかりません。存在するのかしら。

ここに3つの事実があります:

  • 商品は1つの商品カテゴリである必要があります
  • EntityDescriptorはCommodityCategoryである必要があります
  • EntityDescriptorは1つの商品用である可能性があります

これはモデル化するのが簡単です:

代替テキスト

しかし、ここに制約があります:

  • EntityDescriptorがCommodity用である場合、Commodityによって参照されるCommodityCategoryは、EntityDescriptorによって参照されるCommodityCategoryと等しくなければなりません。

たとえば、これらの商品があったとします。

* -------------------- * ------------ *
| CommodityCategory | 商品|
* -------------------- * ------------ *
| 燃料| ガス|
| 燃料| ガソリン|
| 食品| 砂糖|
* -------------------- * ------------ *

これらは合法です

* ------------------ * ------------------- * ---------- -*
| EntityDescriptor | CommodityCategory | 商品|
* ------------------ * ------------------- * ---------- -*
| 1 | 燃料| |
| 2 | 燃料| ガス|
| 3 | 食品| |
| 4 | 食品| 砂糖|
* ------------------ * ------------------- * ---------- -*

しかし、これは違法です

* ------------------ * ------------------- * ---------- -*
| EntityDescriptor | CommodityCategory | 商品|
* ------------------ * ------------------- * ---------- -*
| 5 | 食品| ガソリン|
* ------------------ * ------------------- * ---------- -*

等式制約を見ましたが、それは関係の存在に関するものであり、関係の実際の値ではありません。

この制約をモデル化するために使用できるものはありますか?

4

3 に答える 3

1

isofとisforの役割の間にサブセット制約を追加することはできません。したがって、カテゴリへのすべての商品、カテゴリへのエンティティ記述子のサブセットです。

テーブルは次のようになります:ED(EntityDescriptor)、CC(CommodityCategory)、CM(Commodity)

ED CC   <--->  CC  CM  ED   <---> CM CC
1  1           1   1   1          1  1 
2  2           2   2   2          2  2
3  3                              5  5 // error, cause CC doesn't have 5,5 to ED
4  4           4   4   4          4  4 
5  4           4   5   4          5  4 // ok, cause CC have 4 to 5 on CC-ED
6  4                              6  3 // error, cause ED-CC doesn't have 6,3

したがって、CCにはED(r1)とCM(r2)の2つの役割があり、r2r1のサブセットであることがわかります。したがって、商品にはEDに対する直接の制約の役割はなく、CCを介して適用される制約があると思います。

于 2010-11-29T03:18:39.753 に答える
1

CQLで記述されている場合は、ActiveFactsホームページを参照してください。次のようなサブセット制約が必要です。

some EntityDescriptor references some Commodity
    only if that EntityDescriptor is for some CommodityCategory and that Commodity is of that CommodityCategory;

各方向の読みを含めると、これはより流暢になることに注意してください。

NORMAでは、2つの役割ペアを持つサブセット制約が必要です。

サブセットペアは、「EntityDescriptorreferencesCommodity」の2つの役割です。スーパーセットペアは、「EntityDescriptorはCommodityCategory用です」のEntityDescriptorの役割であり、「Commodity isofCommodityCategory」の商品の役割です。

各ペアの最初の役割は同じタイプ(EntityDescriptor)で実行され、同様に各ペアの2番目の役割(Commodity)でも実行されることに注意してください。互換性のあるサブタイプ/スーパータイプを使用することも可能ですが、タイプはこのように互換性がある必要があります。

等式制約は、2つのサブセット制約のようなもので、1つは各方向に実行されます。EntityDescriptorがCommodityCategory用であり、CommodityがそのCommodityCategoryのものである場合、またはその逆の場合は常に、少なくとも1つの参照が存在する必要があります。

于 2014-03-20T06:04:18.973 に答える
0

データベースの使用を強制したい場合は、挿入/更新トリガーの前に、一致しないEntityDescriptionとCommodityの関連付けを防ぐことをお勧めします。

コードの使用を考えている場合は、仕様パターンを調べることをお勧めします。Commodity、EntityDescriptor、およびCommodityDescriptorクラスを想定します。CommodityDescriptorは、他の2つのクラスの構成の一部になります。商品には、その構成の一部として、MatchingCommidityDescriptionSpecification(はい、冗長です)などの仕様が含まれます。次に、Commodity.setEntityDescription(EntityDescription entityDescriptor)が呼び出されると、CommodityとEntityDescriptorのCommodityDescriptor値を比較することにより、仕様に対して検証されます。

于 2010-11-29T03:48:35.067 に答える