• 多表


    分析步骤:
    #1、先站在左表的角度去找
    是否左表的多条记录可以对应右表的一条记录,如果是,则证明左表的一个字段foreign key 右表一个字段(通常是id)

    #2、再站在右表的角度去找
    是否右表的多条记录可以对应左表的一条记录,如果是,则证明右表的一个字段foreign key 左表一个字段(通常是id)

    #3、总结:
    #多对一:
    如果只有步骤1成立,则是左表多对一右表
    如果只有步骤2成立,则是右表多对一左表

    #多对多
    如果步骤1和2同时成立,则证明这两张表时一个双向的多对一,即多对多,需要定义一个这两张表的关系表来专门存放二者的关系

    #一对一:
    如果1和2都不成立,而是左表的一条记录唯一对应右表的一条记录,反之亦然。这种情况很简单,就是在左表foreign key右表的基础上,将左表的外键字段设置成unique即可

    多对一    foreign  key

    学生     班级

    多个学生是一个班级的     学生表有一个外键   关联班级表

    书籍      作者

    多本书可以都是一个作者写的

    书籍表有一个外键  关联作者表

    书籍     出版社

    多本书可以同时是一个出版社的

    书籍表有一个外键  关联出版社表

    商品      订单

    多个商品可以在一个订单中

    商品表有一个外键    关联订单表

    多对多

        学生     班级   多对一

           多个学生是一个班级的     学生表有一个外键   关联班级表

        班级    学生    多对一   多个班级对应一个学生 

    一本书可以有多个作者

    一个作者可以写多本书

    一个订单可以有多个商品

    一个商品可以属于多个订单

    一对一  

           客户    学生

           unique         foreign  key   unique

    create table author2book(
    id int not null unique auto_increment,
    author_id int not null,
    book_id int not null,
    constraint fk_author foreign key(author_id) references author(id)
    on delete cascade
    on update cascade,
    constraint fk_book foreign key(book_id) references book(id)
    on delete cascade
    on update cascade,
    primary key(author_id,book_id)
    );
     
  • 相关阅读:
    Linux中断管理 (2)软中断和tasklet
    Linux中断管理 (1)Linux中断管理机制
    Linux中断管理
    Linux内核访问用户空间文件:get_fs()/set_fs()的使用
    Linux进程管理 (1)进程的诞生
    Linux进程管理专题
    Linux内存管理 (23)一个内存Oops解析
    Linux内存管理 (22)内存检测技术(slub_debug/kmemleak/kasan)
    Linux内存管理 (21)OOM
    Linux内存管理 (20)最新更新和展望
  • 原文地址:https://www.cnblogs.com/ch2020/p/12891576.html
Copyright © 2020-2023  润新知