我有一个客户表,该表通过中间的CustomerAddress表链接到地址表。这意味着一个客户可以有很多地址,而一个地址可以有很多客户。 (这是必要的,因为我们将配偶和子女作为单独的客户来对待,并且每个人都可以有送货,工作,账单和其他地址)。
我希望客户能够指定首选地址。
我的想法是在客户表中创建一个新列,该列链接到一个CustomerAddress记录。
我的问题是-如何确保所选的首选地址是该客户的地址之一?
我的想法是将Check约束放在customer.preferredAddress字段上,该字段检查给定的CustomerAddress以查看记录的客户ID是否与正在更新的客户匹配。
这可能吗?我只用过Check约束来检查简单的东西,例如(Value> 0)等。
谢谢你的帮助
最佳答案
编写用于验证地址所有权的UDF,然后从检查约束中引用该UDF。
CREATE FUNCTION dbo.fnIsAddressOwner (
@CustomerId int,
@AddressId int
)
RETURNS tinyint
AS
BEGIN
DECLARE @Result tinyint
IF EXISTS(SELECT * FROM CustomerAddresses WHERE CustomerId=@CustomerId and AddressId=@AddressId)
SET @Result= 1
ELSE
SET @Result= 0
RETURN @Result
END
CREATE TABLE Customers (
CustomerId int,
PreferredAddressId int,
CONSTRAINT ckPreferredAddressId CHECK (
dbo.fnIsAddressOwner(CustomerId, PreferredAddressId) = 1)
)
)
关于sql - 复杂的检查约束?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21999707/