我有一个customers表,它通过中间CustomerAddress表链接到地址表。这意味着客户可以拥有多个地址,而地址可以拥有许多客户。 (这是必要的,因为我们将配偶和子女作为单独的客户处理,每个人都可以有送货,工作,账单和其他地址。)
我希望客户能够指定首选地址。
我的想法是在customers表中创建一个链接到CustomerAddress记录的新列。
我的问题是 - 如何确保所选择的首选地址是该客户地址之一?
我的想法是在customers.preferredAddress字段上放置一个Check约束,该字段检查给定的CustomerAddress以查看该记录的客户ID是否与正在更新的客户匹配。
这可能吗?我只使用了Check约束来检查像(Value> 0)等简单的东西。
感谢您的帮助
答案 0 :(得分:6)
编写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)
)
)