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' 是参与多个关系的外键。一对一的实体模型将不会验证,因为数据不一致是可能的。

???

为什么它丢弃了我的外键?因为“一对一的实体模型将无法验证,因为可能存在数据不一致。”

所以听起来好像是因为数据不一致而放弃了 FK,但放弃 FK 实际上会降低日期一致性?

我应该重新设计我的数据库吗?L2E 是否有办法处理参与多个关系的 FK?让 FK 参与多个关系是否被认为是糟糕的数据库设计?

4

2 回答 2

3

您所描述的转换为面向对象的术语是,FlowObject 包含一个可选的 ProcessObject 和一个可选的 DecisionObject。如果这是您真正的意思,那么数据库架构是正确的。

如果您尝试让 ProcessObject 和 DecisionObject扩展FlowObject,则可能会出现不一致,因为 ProcessObject 和 DecisionObject 行都可能存在。为了消除不一致,联合子类建模技术是合适的:只有 ProcessObject 和 DecisionObject 表存在,每个表都包含所有相关字段,而 FlowObject 作为一个抽象基类,成为一个视图,由公共基础字段之间的联合组成。两张桌子。

于 2009-05-13T05:01:05.037 回答
2

我在尝试重构时遇到了同样的错误。在 EFv1 (.NET 3.5) 中,这无法解决。在 EFv4 (.NET 4.0) 中,您可以将独立关联(EFv1 中唯一可用的关联/关系)更改为外键关联,它将起作用。但是 FK 协会还有一些其他的缺点,所以它不是灵丹妙药。

于 2011-02-09T11:59:38.680 回答