SQL:如何使用约束强制执行函数依赖?

Sai*_*ali 5 sql relational-algebra relational-database unique-constraint functional-dependencies

假设我们有一张表:

CREATE TABLE Jobs
    (
      JobID INT PRIMARY KEY ,
      AssignedUser VARCHAR(10) ,
      Zone VARCHAR(10)
    )
Run Code Online (Sandbox Code Playgroud)

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

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

Mar*_*ith 3

像下面这样的东西应该有效。您可能需要添加一个 where 子句,Zone IS NULL根据所需的语义排除。

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) 
Run Code Online (Sandbox Code Playgroud)

  • 多么巧妙的伎俩啊。我以前怎么没见过呢?! (2认同)