一尘不染

MS SQL Server交叉表约束

sql

我有三个表:

1)应用程序(AppId,名称)
2)屏幕(ScreenId,名称)
3)关系(AppId,ScreenId)

现在,我想对相关表施加一些限制:可以将同一屏幕分配给多个应用程序,但是不能将两个具有相同名称的屏幕分配给同一应用程序。

我知道我可以将Screen.Name添加到关系表中,然后在AppId和Screen.Name上创建PK,但是我不希望这样的解决方案,因为Screen.Name可能会发生变化。

为了达到这种限制,我还需要其他哪些选择?


阅读 209

收藏
2021-03-10

共1个答案

一尘不染

您可以基于和表创建索引视图Relation并在其中Screen应用唯一约束。

create view DRI_UniqueScreens
with SCHEMABINDING
as
    select r.AppId,s.Name
    from
       [Schema].Relation r
         inner join
       [Schema].Screen s
         on
            r.ScreenId = s.ScreenId
GO
CREATE UNIQUE CLUSTERED INDEX IX_DRI_UniqueScreens
    on DRI_UniqueScreens (AppId,Name)
2021-03-10