假设我们有一张表:
CREATE TABLE Jobs
(
JobID INT PRIMARY KEY ,
AssignedUser VARCHAR(10) ,
Zone VARCHAR(10)
)
我们需要强制执行的约束是:确保没有用户在多个区域中分配作业,即存在功能依赖AssignedUser => Zone
。
如何在SQL中强制执行此操作?不幸的是,这是一个遗留表,我们无法改变其结构,但我们可以创建约束来强制执行完整性。
答案 0 :(得分:2)
以下内容应该有效。您可能希望添加一个除Zone IS NULL
之外的where子句,具体取决于所需的语义。
CREATE VIEW V
WITH SCHEMABINDING
AS
SELECT AssignedUser,
Zone,
COUNT_BIG(*) AS C
FROM dbo.Jobs
GROUP BY AssignedUser,
Zone
GO
CREATE UNIQUE CLUSTERED INDEX IX
ON V(AssignedUser)