在教师和学生表中使用约束

Posted

技术标签:

【中文标题】在教师和学生表中使用约束【英文标题】:Using constraint in table of teacher and students 【发布时间】:2017-10-09 12:49:38 【问题描述】:

例如,我有 3 个表:教师、学生和人员。

拥有teacher_id 和person_id 的教师,

拥有 student_id 和 person_id 的学生,

拥有 person_id 的人和一些关于他的信息。

当同一个人是老师和学生时,我应该如何使用约束来避免这种情况。我知道如何以简单的方式使用约束,例如限制日期或其他整数值。但是在这里我不知道如何连接和约束它们。

【问题讨论】:

@jarlh 这不是重点,我无法理解这个概念 我没有看到任何关系映射问题。如果一个人都是其中之一,则基本上相同的外键 person_id 出现在两个不同的表中(即:学生和教师)。 【参考方案1】:

如果你想SELECT 所有persons,但studentsteachers,你可以把它放在你的WHERE 子句中:

SELECT *
FROM persons p
INNER JOIN student_id s
   ON s.person_id = p.person_id
INNER JOIN teacher_id t
   ON t.person_id = p.person_id
WHERE student_id != teacher_id

更新

在创建索引时在 CASE 语句中使用 WHERE 子句:

CREATE UNIQUE INDEX index_person ON index_table(
  CASE WHEN student_id != teacher_id
       THEN person_id
       ELSE NULL
  END
);

【讨论】:

感谢您的回答。但这不是从表中选择。我想使用我在问题中描述的设置创建数据库。

以上是关于在教师和学生表中使用约束的主要内容,如果未能解决你的问题,请参考以下文章

SQL简单程序题

SQL数据库约束

如何添加 NOT NULL 约束以及列的默认值?

深刻理解数据库外键含义

数据库SQL查询语句的编写

数据库中的sql语句完整性约束