2012-04-20 71 views
1

我需要创建3个表看起来像这样SQL如何设置外键

学生(SID:CHAR(12),SNAME:VARCHAR(50),bdate:日期,地址:VARCHAR(50 ),scity:VARCHAR(20),年:CHAR(20),GPA:FLOAT)

公司(CID:CHAR(8),CNAME:VARCHAR(20))

申请(SID :CHAR(12)CID:CHAR(8)

(粗体属性是主键)

但我不知道如何自例如申请表的CID设置外键既是主键在申请表和公司表(有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;"; 
+0

你可以有一个主键也是一个外键。 – 2012-04-20 13:07:58

+0

在申请表中的CID是FK,在公司表中的CID是PK – Randy 2012-04-20 13:08:03

+0

使用InnoDB类型的表,你的问题将得到解决用户加入让数据 – 2012-04-20 13:17:50

回答

3

它看起来像apply表是许多一对多studentcompany之间的连接。

在这种情况下,您希望像设置studentcompany(尽管发布SHOW CREATE TABLE student的输出可能会为您提供更有帮助的答案)。所以对于申请表,你希望两个外键:一个在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标识符添加到您希望成为主键的任何列中。

+0

可以改变表整合到innodb类型的表?因为我使用的是InnoDB引擎 – droidata 2012-04-20 13:53:55

+0

是的。他们在所有引擎上工作。如果您使用外键,您将需要使用InnoDB。 – 2012-04-20 14:02:25

+0

我在表格创建时添加了PRIMARY KEY标识符和相关表格的主值。还添加了在所有表创建后提供的alter table语句。现在我怎样才能检查这个作品或不。(顺便说一句,它编译并创建所有表并插入数据,没有任何错误或异常) – droidata 2012-04-20 14:13:28

0

i中的应用表中设置两个SID和CID作为foreignkeys..this表称为结合表这里的主键是一个复合主键既SID和CID一起。 appply表的外键是SID和CID apply表的主键是(sid,cid)复合主键。 每个公司可以有任意数量的学生.. 每个学生都可以是任意数量的公司 但一个组合不会重复的一部分。