我有以下3個表,我試圖讓模式更改爲[Check] .FromCompanyID,[Check] .ToCompanyID和[ ActivityToCheck] .ActivityID。除了將兩個FromCompanyID和ToCompanyID添加到[ActivityToCheck]表中,我怎麼能修改到模式,以便我可以在其中一個表上添加唯一約束?MSSQL模式更改以說明跨兩個表的唯一性
CREATE TABLE [dbo].[Activity](
[ActivityID] [int] IDENTITY(1,1) NOT NULL,
[UserID] [int] NOT NULL,
[StartDate] [date] NOT NULL,
[EndDate] [date] NOT NULL,
[Description] [nvarchar](255) NULL
--<OTHER COLUMNS>
)
CREATE TABLE [dbo].[Check](
[CheckID] [int] IDENTITY(1,1) NOT NULL,
[CheckNumber] [nvarchar](255) NOT NULL,
[CheckDate] [date] NOT NULL,
[CheckDescription] [nvarchar](255) NULL,
[FromCompanyID] [int] NOT NULL,
[ToCompanyID] [int] NOT NULL
--<OTHER COLUMNS>
)
CREATE TABLE [dbo].[ActivityToCheck](
[ActivityToCheckID] [int] IDENTITY(1,1) NOT NULL,
[ActivityID] [int] NOT NULL,
[CheckID] [int] NOT NULL
)
編輯:將一個綁定到架構視圖是確保唯一合理的方式:
CREATE VIEW TestView
WITH SCHEMABINDING AS
SELECT ActivityToCheckID, CheckNumber, CheckID, FromCompanyID, ToCompanyID, ActivityID, AmountPaid
FROM [dbo].[Check] c
inner join [dbo].ActivityToCheck a on c.CheckID = a.CheckID
GO
CREATE UNIQUE CLUSTERED INDEX testindex on TestView (FromCompanyID, ToCompanyID, ActivityID)
GO
感謝,
如果我理解正確,您希望'ActivityToCheck'對於每個「CheckID」是唯一的,那是正確的嗎? – 3dd
對不起,ActivityToCheck需要在FromCompanyID,ToCompanyID和ActivityID之間唯一,基本上我試圖避免的是FromCompany的兩個人將相同的ActivityID添加到ToCompany的幾個不同的檢查中。 – user3800174