我通过phpmyadmin遇到mysql问题。 我有一个老师的桌子(tid,名字)和主题(sid,名字)。因为这是一个n:m基数,我制作了第三个名为teacher_subjects的表,其中包含2个主键(tid,sid)。
这个组合我想用于第四个叫做预订的表(lid,date,tid,sid)。如何使用正确的组合为表teachers_subjects设置外键?
我设法完成了包括他们之间关系的表格,但是在表格预订中我也可以选择表teacher_subject中没有实现的组合。
我认为必须使用多个外键,但我不知道如何管理它。
答案 0 :(得分:1)
任何表格都有最大 ONE 主键。主键可以由一组多个列定义...您可以将其称为复合主键,但请准确,并且不要说该表有2个主键。
也就是说,主键和外键都可以是复合的(由多个列定义)。
在您的情况下,您可以在创建表时执行此操作,如下所示:
CREATE TABLE teacher_subjects(
tid INTEGER,
sid INTEGER,
PRIMARY KEY (tid, sid)
);
CREATE TABLE booking(
lid INTEGER,
date DATE,
tid INTEGER,
sid INTEGER,
FOREIGN KEY (tid, sid) REFERENCES teacher_subjects (tid, sid)
);
...或者之后可以使用ALTER TABLE语句执行此操作,如下所示:
CREATE TABLE teacher_subjects(
tid INTEGER,
sid INTEGER,
PRIMARY KEY (tid, sid)
);
CREATE TABLE booking(
lid INTEGER,
date DATE,
tid INTEGER,
sid INTEGER
);
ALTER TABLE booking
ADD FOREIGN KEY (tid, sid) REFERENCES teacher_subjects (tid, sid);