SQL:如何使用约束强制执行功能依赖?

时间:2014-08-25 17:18:41

标签: sql relational-database unique-constraint relational-algebra functional-dependencies

假设我们有一张表:

CREATE TABLE Jobs
    (
      JobID INT PRIMARY KEY ,
      AssignedUser VARCHAR(10) ,
      Zone VARCHAR(10)
    )

我们需要强制执行的约束是:确保没有用户在多个区域中分配作业,即存在功能依赖AssignedUser => Zone

如何在SQL中强制执行此操作?不幸的是,这是一个遗留表,我们无法改变其结构,但我们可以创建约束来强制执行完整性。

1 个答案:

答案 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)