如何使用 sql 向 table 添加约束?

How do I add a constraint to this table using sql?

我有一个名为 Student 的 table,这个 table 有 2 列 Student_IdIs_Honor_Student(这是一个标志列 01 表示 true/false)

我有另一个名为 Honor_Student 的 table,它有 2 列 Student_IdClass_Id,以及一些与此问题无关的其他列。

当然是第 3 个 table Class,它有一个 Class_Id 列。

最后是一个名为 Enrollment 的 table,它有 Student_IdClass_Id 引用 StudentClass table s.

好的,所以我想要的是一个约束来检查一个学生是否是优等生,那么在允许我插入记录之前,Honor_Student table 中必须存在一个条目进入 Enrollment table。如果学生不是优等生,则此限制不适用。我怎样才能做到这一点?

顺便说一句,我正在使用 jdbc liquibase,所以我将不胜感激任何使用 liquibase 的示例:https://www.liquibase.org/documentation/changes/add_check_constraint.html

但是对于初学者来说,即使使用 Alter Table 或一些可以使这成为可能的方法,我真的很感激在正确的方向上踢球......从技术上讲,我认为我正在寻找 "conditional" Student_IdClass_Id 的外键约束引用 Honor_Student table 但前提是它是优等生……有点奇怪。

AFAIK 我想我正在寻找一个 "conditional" 外键约束 这可能是不可能的。

您可以使用User Define Function and Conditional CHECK约束:

例如:

UDF:

CREATE FUNCTION IsHonarStudentExist (
    @Student_Id INT
)
RETURNS bit
AS
BEGIN
    IF EXISTS (SELECT * FROM Honor_Student WHERE Student_Id = @Student_Id)
        return 1
    return 0
END

检查约束:

ALTER TABLE Student WITH CHECK
ADD check (
    (Is_Honor_Student= 1 AND IsHonarStudentExist (Student_Id) = 1)
    OR
    (Is_Honor_Student= 0)

注意:语法、数据类型和查询可能因您的数据库而异。 上面的代码只是一种方法。