gpt4 book ai didi

sql - 复杂的检查约束?

转载 作者:行者123 更新时间:2023-12-03 02:30:39 24 4
gpt4 key购买 nike

我有一个客户表,它通过中间的 CustomerAddress 表链接到地址表。这意味着一个客户可以有多个地址,一个地址可以有多个客户。 (这是必要的,因为我们将配偶和 child 视为单独的客户,每个人都可以有送货地址、工作地址、账单地址和其他地址)。

我希望客户能够指定首选地址。

我的想法是在客户表中创建一个链接到 CustomerAddress 记录的新列。

我的问题是 - 如何确保所选的首选地址是客户地址之一?

我的想法是在customers.preferredAddress字段上放置一个Check约束,该字段检查给定的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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com