我有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
如何在foreign key
字段中获得teacher_id
下拉菜单,其中包含基于subject_id
中指定值的可用选项?如果在go
的数据插入部分中点击phpmyadmin
后至少无法收到错误消息?
答案 0 :(得分:1)
我不使用phpmyadmin,但我会从
开始前三个与身份有关;最后一个允许您使用外键约束来定位{teachers.id,teachers.subject_id}。
在一般情况下,人们的名字并不是唯一的。所以你可以有两位教同一主题的同名教师。如何处理这类问题取决于应用程序。
然后是外键
如果您尝试将具有错误主题的教师插入事件,那么至少会给您一个错误。
您需要use the INNODB engine来强制执行外键约束。其他引擎会解析它们,但忽略它们。
InnoDB支持FOREIGN KEY和REFERENCES子句 存储引擎,它实现ADD [CONSTRAINT [symbol]] FOREIGN KEY [index_name](...)REFERENCES ...(...)。请参见第14.6.6节“InnoDB 和外键约束“。对于其他存储引擎,条款 被解析但被忽略。