gpt4 book ai didi

sql - SQL 中的复杂外键约束

转载 作者:行者123 更新时间:2023-12-01 11:57:08 24 4
gpt4 key购买 nike

有没有一种方法可以使用 SQL Server 2005 定义一个约束,不仅可以确保外键存在于另一个表中,而且还满足特定条件?

例如,假设我有两个表:

Table A
--------
Id - int
FK_BId - int

Table B
--------
Id - int
Name - string
SomeBoolean - bit

我能否定义一个约束条件,即 sayd FK_BId 必须指向表 B 中的一条记录,并且表 B 中的该记录必须具有 SomeBoolean = true?提前感谢您提供的任何帮助。

最佳答案

您可以在 (Id, SomeBoolean) 上使用复合键来执行业务规则,在表 A 中引用它并使用 CHECK 约束在 FK_BSomeBoolean 上以确保它始终为 TRUE。顺便说一句,我建议避免使用 BIT 而是使用 CHAR(1) 进行域检查,例如

CHECK (SomeBoolean IN ('F', 'T'))

表结构可能是这样的:

CREATE TABLE B
(
Id INTEGER NOT NULL UNIQUE, -- candidate key 1
Name VARCHAR(20) NOT NULL UNIQUE, -- candidate key 2
SomeBoolean CHAR(1) DEFAULT 'F' NOT NULL
CHECK (SomeBoolean IN ('F', 'T')),
UNIQUE (Id, SomeBoolean) -- superkey
);

CREATE TABLE A
(
Ib INTEGER NOT NULL UNIQUE,
FK_BId CHAR(1) NOT NULL,
FK_BSomeBoolean CHAR(1) DEFAULT 'T' NOT NULL
CHECK (FK_BSomeBoolean = 'T')
FOREIGN KEY (FK_BId, FK_BSomeBoolean)
REFERENCES B (Id, SomeBoolean)
);

关于sql - SQL 中的复杂外键约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5953966/

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