【发布时间】:2013-07-23 22:21:34
【问题描述】:
我的视图如下所示:
CREATE view reference.Test WITH SCHEMABINDING as
SELECT reference.HighlevelTestId as TestId, Name, IsActive,
cast(1 as bit) as IsHighLevelTest
FROM reference.HighlevelTest
UNION ALL
SELECT LowLevelTestId as TestId, Name, IsActive,
cast(0 as bit) as IsHighLevelTest
FROM reference.LowLevelTest
GO
注意:HighLevelTestId 和 LowLevelTestId 保证永远不会有相同的值(没有冲突)。
我有另一个看起来像这样的表:
CREATE TABLE [Reference].[TestAddition](
[TestId] [BigInt] NOT NULL,
[OtherStuff] [bit] NOT NULL,
....
)
我真的很想在 TestId 列上将我的 TestAddition 表 FK 到我的 Test 视图(为了引用完整性和 OData 的易用性)。
有什么办法吗?
【问题讨论】:
-
也许
CHECK CONSTRAINT作为函数msdn.microsoft.com/en-us/library/ms188258(v=sql.105).aspx 就足够了吗?仅供参考。 -
认真的吗? “FK关……”?你可能想改写一下。
-
我想不出在包含联合的视图上伪造主键的方法,但这并不妨碍您加入该视图。这只是意味着您将自己管理参照完整性,而不是依赖数据库来完成。你已经说过“HighLevelTestId 和 LowLevelTestId 保证永远不会有相同的值”,所以你已经成功了 :)
-
HighLevelTestId 和 LowLevelTestId 如何保证永远不会有相同的值?为什么是两张表?
-
@Blam - HighLevelTestId 和 LowLevelTestId 值是从不重叠的业务数据中生成的。它们是两个不同的概念(一个通常拥有另一个),但它们有时被视为一个单一的“测试”概念(在这种情况下)。
标签: sql-server tsql sql-server-2012