MySql数据库之表与表的关系

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a2013126370/article/details/79671755

关系一:一对一

    例如: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);

    视图如下:

    

猜你喜欢

转载自blog.csdn.net/a2013126370/article/details/79671755
今日推荐