关系一:一对一
例如:QQ表与QQDetail表,我们首先要找到主从关系,从而确定外键约束。在这两张表中,QQ表有两个属性(qqid与password);另一张表为QQDetail表有三个属性(qqid,name与address)。我们可以认为,一个QQ号只能对应一份含具体信息的表格。这两个表中,QQ表的qqid和QQDetail表的qqid都设为主键约束(数据唯一且不能不为null)。
Table Data:
代码如下:
CREATE TABLE QQ(
qqid INT PRIMARY KEY,
PASSWORD VARCHAR(50)
);
CREATE TABLE QQDetail(
qqid INT PRIMARY KEY,
NAME VARCHAR(50),
address VARCHAR(50)
);
ALTER TABLE QQDetail ADD CONSTRAINT fk_QQ_QQDetail FOREIGN KEY(qqid) REFERENCES QQ(qqid);
对应视图如下:
关系二:一对多(多对一)
最为常见的就是一对多!一对多和多对一,要看你从哪个角度出发。stu1为学生表,score1为成绩表。stu1和score1的关系,从stu1来看就是一对多,而从score1的角度来看就是多对一!这种情况都是在多方创建外键(此案例中score1创建外键)!
Table Data:
代码如下:
CREATE TABLE stu1(
sid VARCHAR(10) PRIMARY KEY,
sname VARCHAR(50) NOT NULL
);
CREATE TABLE score1(
sid VARCHAR(10),
score DOUBLE,
courseid INT
);
ALTER TABLE score1 ADD CONSTRAINT fk_stu1_score1 FOREIGN KEY (sid) REFERENCES stu1(sid);
视图如下:
关系三:多对多
例如:stu2和teacher表,即一个学生可以有多个老师,而一个老师也可以有多个学生。这种情况通常需要创建中间表来处理多对多关系。例如再创建一张表tea_stu2_real表,给出两个外键,一个相对stu2表的外键,另一个相对teacher表的外键。
代码如下:
CREATE TABLE teacher (
tid INT PRIMARY KEY,
tname VARCHAR(20)
);
CREATE TABLE stu2(
sid INT PRIMARY KEY,
sname VARCHAR(20)
);
CREATE TABLE tea_stu2_real(
tid INT,
sid INT
);
ALTER TABLE tea_stu2_real ADD CONSTRAINT fk_tid FOREIGN KEY(tid) REFERENCES teacher(tid);
ALTER TABLE tea_stu2_real ADD CONSTRAINT fk_sid FOREIGN KEY(sid) REFERENCES stu2(sid);
视图如下: