如何设置依赖于其他两个表关系的外键?

Posted

技术标签:

【中文标题】如何设置依赖于其他两个表关系的外键?【英文标题】:How to set a foreign key which is dependent on the relation of other two tables? 【发布时间】:2014-09-04 12:06:30 【问题描述】:

我有 3 张桌子;教师表、科目表和活动表。 1.学科与教师之间存在一对多的关系,即每位教师只能教授一门学科,但多位教师可以教授相同的学科。 2.教师与事件之间存在多对多关系。

科目表示例

id(PK)      |  name
-------------------
1           |  php
-------------------
2           |  java
-------------------
3           |  python
-------------------
4           |  c++
--------------------
5           |  c#

教师表示例

id(PK)      |  name      | subject_id(FK to subjects.id) 
----------------------------------
1           |  messi     |  2
----------------------------------
2           |  ronaldo   |  4
----------------------------------
3           |  pele      |  1
----------------------------------
4           |  maradona  |  2

事件表示例

id(PK)      |  venue      | subject_id (FK to teacher.id)     | teacher_id(FK to subject.id)
-----------------------------------------------------------------------------------------------
1           |  location1  |       2                           |      has to be either 1 or 4
-----------------------------------------------------------------------------------------------
2           |  location2  |       1                           |      has to be 3 only
------------------------------------------------------------------------------------------------
3           |  location3  |       4                           |      has to be 2 only
------------------------------------------------------------------------------------------------
4           |  location4  |       4                           |      has to be 2 only

如何根据subject_id 中的指定值在teacher_id 字段中获得带有可用选项的foreign key 下拉菜单?如果在phpmyadmin 的数据插入部分中单击go 后可能至少出现错误消息?

【问题讨论】:

投反对票的原因是什么? @philipxy This 正在给page not found This 来自here。 【参考方案1】:

我不使用 phpmyadmin,但我会从

开始 subject.name 的唯一约束, 对 teachers.name, Teachers.subject_id 对的唯一约束, 对 events.venue, events.subject_id, events.teacher_id 的唯一约束, 对 teachers.id, Teachers.subject_id 对的唯一约束。

前三个与身份有关;最后一个允许您使用外键约束来定位 teachers.id, Teachers.subject_id。

在一般情况下,人名不是唯一的。因此,您可以有两位同名教师教授同一学科。您如何解决此类问题取决于应用程序。

然后是外键

从 Teachers.subject_id 到subjects.id,以及 从 events.teacher_id, events.subject_id 到 teachers.id, Teachers.subject_id

如果你试图在事件中插入一个主题错误的老师,那至少会给你一个错误。

您需要use the INNODB engine 来强制执行外键约束。其他引擎会解析它们,但会忽略它们。

InnoDB 支持 FOREIGN KEY 和 REFERENCES 子句 存储引擎,实现了 ADD [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (...) 参考文献 ... (...)。请参阅第 14.6.6 节,“InnoDB 和外键约束”。对于其他存储引擎,子句 被解析但被忽略。

【讨论】:

请提供完整的mysql代码来解决问题,真的很有帮助。 是的,我使用的是INNODB引擎,请提供mysql代码来创建events表,这样events表中的subject_id,teacher_id对服从teachers表。 “为我写代码”在 *** 上效果不佳。既然你现在知道你需要做什么,你可以尽你最大的努力,如果你失败了,再问一个问题。如果您确实提出其他问题,请确保其中包含您的代码、数据库版本和任何错误消息。 经过一番研究,我发现我们甚至无法在 mysql 中设置check,我们需要使用触发器。所以基本上我没有得到答案,同时有人无缘无故地否决了我的问题。 MySQL 不强制检查约束,但如果您使用 innodb 引擎,它将强制执行外键约束。您不需要为此触发。

以上是关于如何设置依赖于其他两个表关系的外键?的主要内容,如果未能解决你的问题,请参考以下文章

phpmyadmin - 如何设置依赖于外键的字段值?

如何在sqlyog设置表的外键

如何在课堂上设置两个外键? DJANGO ORM

oracle中 主键和外键是啥意思?啥地方采用呢?

oracle中 主键和外键是啥意思?啥地方采用呢?

oracle中 主键和外键是啥意思?啥地方采用呢?