1

在我的数据库中,我有两个具有完全相同列的视图(每个视图通过链接服务器引用来自不同远程数据库的数据)。

因为两个视图都有相同的列,逻辑上表示相同的数据。

在某些情况下,我既需要存储在不同视图中的数据的联合,也需要独立地来自每个视图的单个数据。

在这种情况下使用的最佳映射是什么?有一个特定的地图可以帮助我在一个具有鉴别器值的实体中连接两个视图?

这里有一个例子:

视图1

Col1 | Col2

X1 | Y1

X2 | Y2

视图2

Col1 | Col2

K1 | Z1

K2 | Z2

情况 1 - 数据联合

VIEW1 U VIEW2 = (X1,X2,K1,K2)(Y1,Y2,Z1,Z2)

情况 2 - 每个视图的单个数据

VIEW1 = (X1,x2)(Y1,Y2)

VIEW2 = (K1,K2)(Z1,Z2)

4

1 回答 1

1

我会选择第三个视图,定义为您的两个视图的联合(看起来像您的情况 1),添加第三列Discrim作为鉴别器值。比方说 for 的价值,for1View1价值。2View2

然后我会选择“每个类层次结构表”继承映射策略(http://nhibernate.info/doc/nh/en/index.html#persistent-classes-inheritance第 8.1.1 节),将每个子类映射到每个查看行集,使用鉴别器值。

这样,您可以通过超类查询整个对象集,或者通过查询相应的子类仅查询一个视图。

如果您的视图共享相同的 id,只要 id 是 int 并且 0 不共享,则解决方法可能是在您的第三个视图中将来自 View1 的 id 转换为负数,并为来自 View2 的 id 保留正数。如果您计划存储 id,或者在给定 id 的情况下,以另一种方式访问​​数据,则不应在代码中忘记该约定。

于 2013-03-15T14:44:53.930 回答