SQL如何设置外键

时间:2012-04-20 13:06:10

标签: mysql sql

我需要创建3个看起来像这样的表

学生( sid:CHAR(12),sname:VARCHAR(50),bdate:DATE,地址:VARCHAR(50),scity:VARCHAR(20),年份:CHAR(20) ,gpa:FLOAT)

公司( cid:CHAR(8),cname:VARCHAR(20))

申请( sid:CHAR(12) cid:CHAR(8)

(粗体属性是主键)

但我不确定如何设置外键,因为例如apply table的 cid 是apply table和company table中的主键(对于 sid具有相同的情况:申请表和学生表之间)。谢谢你的帮助。

这些是创建表格的代码:

myQuery = "CREATE TABLE student "
                + "(sid CHAR(12), sname VARCHAR(50), "
                + "bdate DATE, address VARCHAR(50), "
                + "scity VARCHAR(20), year CHAR(20), "
                + "gpa FLOAT) ENGINE=InnoDB;";
 myQuery = "CREATE TABLE company "
                + "(cid CHAR(8), cname VARCHAR(20), quota CHAR(8))ENGINE=InnoDB;";
myQuery = "CREATE TABLE apply "
                + "(sid CHAR(12), cid CHAR(8)) ENGINE=InnoDB;";

2 个答案:

答案 0 :(得分:3)

apply表似乎是studentcompany之间的多对多联接。

在这种情况下,您需要设置studentcompany(尽管发布SHOW CREATE TABLE student的输出可能会为您提供更多有用的答案)。因此,对于apply表,您需要两个外键:一个sid引用student.sid,一个cid引用company.cid。也许是这样的:

ALTER TABLE apply ADD CONSTRAINT sid FOREIGN KEY (sid) REFERENCES student(sid);
ALTER TABLE apply ADD CONSTRAINT cid FOREIGN KEY (cid) REFERENCES copmany(cid);

编辑:根据您的表创建,您也没有设置主键。将PRIMARY KEY标识符添加到您希望成为主键的任何列。

答案 1 :(得分:0)

我的apply表将sid和cid都设置为foreignkeys ..这个表在这里称为联结表,主键是sid和cid的复合主键。 appply表外键是SID和CID apply table主键是(sid,cid)复合主键。 每个公司都可以有任意数量的学生.. 每个学生都可以成为众多公司的一部分 但是一个组合不会重复。