当前位置: 首页 > 面试题库 >

约束检查外键的值

许黎明
2023-03-14
问题内容

我有这两张表

Table: Guards

ID int
Name varchar
Rank int

Table: Squads

SquadId
Leader
SquadName

Leader列指向表中的ID列,Guard我正在尝试创建一个约束,以检查Rank链接到作为领导者提供的保护ID的列是否为特定值(在本例中为1)

这可能吗?还是我必须使用扳机?


问题答案:

您需要添加一个CHECK约束。我将约束包装到一个函数中,因为您需要检查另一个表的值。

CREATE FUNCTION CheckLeaderRank
(@LeaderID INTEGER)
RETURNS INTEGER
AS 
BEGIN
DECLARE @value INTEGER;
DECLARE @MinimumRank INTEGER = 3;

SET @value = CASE WHEN (SELECT RANK FROM Guards WITH(NOLOCK) WHERE Id = @LeaderID) >= @MinimumRank THEN 1 ELSE 0 END

RETURN @value
END

该函数将检查防护等级Rank是否足够高:请确保将其设置@MinimumRank为适当的值,或者甚至更好地从另一个表中获取它。

现在将约束添加Squads表中。

ALTER TABLE Squads
ADD CONSTRAINT chk_rank CHECK (dbo.CheckLeaderRank(i) = 1)


 类似资料:
  • 问题内容: 我有一个用户表,例如: 和一张有工作的桌子: 可以将作业分配给用户,但只能分配给超级用户。其他用户无法分配作业。 因此,我有一个表格,通过它可以查看将哪个作业分配给了哪个用户: 但是我想创建一个检查约束,该约束引用具有的用户。 那可能吗?还是有其他解决方案? 问题答案: 这将适用于INSERTS: 然后在user_has_job表上检查约束: 适用于插入物: 但是,这是可能的: 因此,

  • mysql 5.7 外键约束 主表:部门表 从表:员工表 添加外键:从表 dep_id 关联 主表 id >[danger] CASCADE > 级联更新 主表数据更新从表会更新外键 级联删除 主表数据删除,从表会一起删除

  • 主要内容:在创建表时设置外键约束,在修改表时添加外键约束,删除外键约束MySQL外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键约束一起使用。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。 外键用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性。比如,一个水果摊,只有苹果、桃子、李子、西瓜等 4 种水果,那么,你来到水果摊要买水果就只能选择苹果、桃子、李子和西

  • 注意 当前章节中涉及的配置一般适用于关系数据库。这里展示的扩展方法在你安装了关系数据库提供程序之后就能获得(由Microsoft.EntityFrmeworkCore.Relational 程序包共享)。 外键约束是为模型中的关系引入的。 惯例 按照惯例,外键约束命名为 FK_<依赖实体类型名称>_<主实体类型名称>_<外键属性名称>。对于组合键,<外键属性名> 则为用下划线分隔的外键属性名。 数

  • 我有两个已经存在于postgres中的表,我们称之为表A和表B。表B的一列有一个外键约束,因为它必须是表A的主键。因此,B和A之间存在多对一的关系,表B中的多条记录对应于表A中的一条记录。 这两个表的实体定义如下。 表B的实体定义如下: 其中userId是映射到表a中的主键user_id的外键。这些约束已经在底层postgres数据库中定义了,所以我没有考虑使用@ManyToOne注释关系(仍然试

  • 问题内容: 在事务SQL中,如何指定外键约束应为1:1关系?声明列UNIQUE是否足够?下面是我现有的代码。 问题答案: 具有UNIQUE和NOT NULL约束的外键列在另一个表中引用UNIQUE,NOT NULL列会创建1:(0 | 1)关系,这可能就是您想要的。 如果存在真正的1:1关系,则第一个表中的每个记录在第二个表中都会有一个对应的记录,反之亦然。在这种情况下,您可能只想制作一张表(除非