2

私はこのようなデータベースモデルを持っています

FlowObject
FlowObjectID (PK)
説明
Active

ProcessObject
FlowObjectID (PK、FK)
HasSubmit

DecisionObject
FlowObjectID (PK、FK)
YesFlowObjectID (FK)
NoFlowObjectID (FK)
YesCaption
NoCaption

エンティティ モデルを作成しようとすると、プロジェクトでこの警告が表示されます。

外部キー制約 'FK_ProcessObject_FlowObject1' がストレージ モデルから除外されました。テーブル 'Investigations.Store.ProcessObject' の列 'FlowObjectID' は、複数の関係に参加している外部キーです。データの不整合が発生する可能性があるため、1 対 1 のエンティティ モデルは検証されません。

???

外部キーが削除されたのはなぜですか? 「データの不整合が発生する可能性があるため、1 対 1 のエンティティ モデルは検証されない」ためです。

データの不整合のために FK を削除したと言っているように聞こえますが、FK を削除すると実際に日付の一貫性が低下しますか?

データベースを再設計する必要がありますか? L2E が複数の関係に参加する FK を処理する方法はありますか? 複数のリレーションシップに参加する FK を持つことは、データベース設計が悪いと見なされますか?

4

2 に答える 2

3

あなたが説明したことをオブジェクト指向の用語に翻訳すると、FlowObject にはオプションの ProcessObject とオプションの DecisionObject が含まれているということです。これが実際の意味である場合、データベース スキーマは正しいです。

ProcessObject と DecisionObject で FlowObject を拡張しようとしている場合、ProcessObject 行と DecisionObject 行の両方が存在する可能性があるため、矛盾が生じる可能性があります。不整合を解消するには、union-subclass モデリング手法が適切です。ProcessObject テーブルと DecisionObject テーブルのみが存在し、それぞれに関連するすべてのフィールドが含まれており、抽象基本クラスとしての FlowObject は、 2 つのテーブル。

于 2009-05-13T05:01:05.037 に答える
2

これをリファクタリングしようとすると、同じエラーが発生します。EFv1 (.NET 3.5) では、これを解決できません。EFv4 (.NET 4.0) では、独立した関連付け (EFv1 で使用できる唯一の関連付け/関係) を外部キー関連付けに変更でき、それが機能します。しかし、FK 関連付けには他にもいくつかの欠点があるため、特効薬ではありません。

于 2011-02-09T11:59:38.680 に答える