• MySQL 之 表与表之间的关系


    1、如何找出两张表之间的关系

    分析步骤:
      1、先从左表的角度去找
      	看左表的多条记录是否可以对应右表的一条记录,如果是,则证明左表的一个字段foreign key (关联)右表的一个字段(通常是id字段)。
      2、再从右表的角度去找
      	看右表的多条记录是否可以对应左表的一条记录,如果是,则证明右表的一个字段foreign key (关联)左表的一个字段(通常是id字段)。
      3、总结:
      	多对一:
      		如果1成立,则说明左表多对一右表。
      		如果2成立,则说明右表多对一左表。
      	多对多:
      		如果1和2同时成立,则说明这两张表是一个双向的多对一,即多对多,需要定义一个这两张表的关系来专门存放二者的关系。
      	一对一:
      		如果1和2都不成立,而是左表的一条记录唯一的对应右表的一条记录,反之亦然,这种情况下,就是在左表foreign key 右表的基础上,将左表的外键字段设置成unique即可。
    

    2、mysql中表与表之间的关系

    (1)一对多 : 关联方式 -- foreign key

    create table class(id int primary key,cname char(12));
    create table student(id int primary key,sname char(16),cid int,foreign key(cid) references class(id));
    

    (2)多对多 : 关联方式 -- foreign key + 一张新的表

    create table class(id int primary key,cname char(12));
    create table teacher(id int primary key,tname char(12));
    create table teach_cls(id int,cid int,tid int,foreign key(cid) references class(id)),foreign key(tid) references teacher(id)));
    

    (3)一对一 : 关联方式 -- foreign key + unique

    create table guest(id int primary key,name char(12));
    create table student(id int primary key,sname char(12),gid int unique,foreign key(gid) referances guest(id));
    
  • 相关阅读:
    广度优先搜索
    洛谷 P1126 机器人搬重物
    codevs 1058 合唱队形
    洛谷P1216 [USACO1.5]数字三角形 Number Triangles
    Codevs 1576 最长严格上升子序列
    跳马(Knight Moves), ZOJ1091, POJ2243
    洛谷 P1644 跳马问题
    NOI 2971 抓住那头牛
    NOI 2727 仙岛求药
    搜索与回溯算法
  • 原文地址:https://www.cnblogs.com/caiyongliang/p/13901683.html
Copyright © 2020-2023  润新知