如何设置依赖于其他两个表关系的外键?
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
后可能至少出现错误消息?
【问题讨论】:
投反对票的原因是什么? @philipxyThis
正在给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 引擎,它将强制执行外键约束。您不需要为此触发。以上是关于如何设置依赖于其他两个表关系的外键?的主要内容,如果未能解决你的问题,请参考以下文章