gpt4 book ai didi

共享的 SQL 规则/约束

转载 作者:行者123 更新时间:2023-11-29 13:15:38 25 4
gpt4 key购买 nike

我有一个包含列的表格:

device_id
account_id
is_owner

以 device_id 和帐户 id 作为联合主键

我如何创建一个 SQL 规则/约束,以便当 is_owner 与联合主键为真时,它将不允许其他组合

device_id = (specific device id)
account_id = (any account id)
is_owner = true

由于设备的所有者应该只有一个,

还有:

device_id  = (specific device id)
account_id = (any account id)
is_owner = false

可以是“很多”,因为所有者帐户可以将设备共享给另一个帐户?

最佳答案

你可以使用部分索引:

CREATE UNIQUE INDEX idx_name 
ON table_name(device_id, account_id) --or only (device_id) if needed
WHERE is_owner = true;

DBFiddle Demo

例子:

CREATE TABLE t(device_id INT NOT NULL, account_id INT NOT NULL, is_owner BOOL);
CREATE UNIQUE INDEX idx_name ON t(device_id, account_id)
WHERE is_owner = true;
INSERT INTO t(device_id, account_id, is_owner)
VALUES( 1,1, false),(1,1,false);

SELECT * FROM t;

INSERT INTO t(device_id, account_id, is_owner)
VALUES( 1,2, true),(1,2,true);
--ERROR: duplicate key value violates unique constraint "idx_name"
--DETAIL: Key (device_id, account_id)=(1, 2) already exists.

关于共享的 SQL 规则/约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49434995/

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