zoukankan      html  css  js  c++  java
  • 数据库表关系(单表、一对一、一对多、多对多)

      写在开头

        一直搞不清楚数据库表之间的关系,看了很多博客还是有些弥漫,没有具体的例子辅助。所以写了下面的内容,此文中的案例以学校为例,个人理解,可能会有诸多不妥之处,仅供参考

    一、两个重要概念:

      什么是主键?外键?

      1.主键:主键是表的一个特殊字段,可以唯一地标识表中的每条信息。比如:身份证号。一个表中可以有一个或多个主键。
          作用:唯一标识、快速查找
      2.外键:如果表B的一个字段(外键)依赖于表A的主键。则成表A为父表,表B为子表。
          原则:外键必须依赖于数据库中已经存在的父表的主键,外键可以为空
          作用:建立该表与父表的关联关系

    二、表关系

        包括单表、多表(一对一、一对多、多对多)

      1.单表

          就是一张表,所有的数据都在一张表中。

          例:下面这张表,学习信息都存在一张表中。

                     

      2.多表

          2.1一对一   (不常用)

            A 表中的一行最多只能匹配于 B 表中的一行

            应用场景:

              1.单表太大,一分为二

              2.由于安全原因而隔离表的一部分

            例:为了收集学生的联系方式,又建了一张学生联系表,如下图。

            联系表(子表)中的外键(学号),必须依赖于信息表(父表)中的主键(学号)存在。

                                

          2.2一对多

             A 表中的一行可以匹配 B 表中的多行,但是 B 表中的一行只能匹配 A 表中的一行

            例:学生到校后,需要分班,下面的两张表就产生了。一个班有多个学生,一个学生只能归属一个班级,

            

            

          2.3多对多

           多对多就是两个一对多

            A 表中的一行可以匹配 B 表中的多行,反之亦然。要创建这种关系,需要定义第三个表,称为结合表,它的主键由 A 表和 B 表的外键组成。

           例:办级分好之后学生就该选课了。我们需要一张课程表。一个学生可以选择多门科,一门课也可以多名同学上。此时我们通过第三张表来映射这种关系。

          课程表:     

           

        学生分班表:

            

         选课结果(第三张表):    

           

  • 相关阅读:
    Codeforces Round #502 (in memory of Leopoldo Taravilse, Div. 1 + Div. 2) E. The Supersonic Rocket
    Codeforces Round #500 (Div. 2) D
    AtCoder Grand Contest 026 D
    Codeforces Round #495 (Div. 2) Sonya and Matrix
    AtCoder Regular Contest 100 E
    1013 数素数
    1010 一元多项式求导(用while接收输入)
    1009 说反话(字符串、栈)
    L2-006 树的遍历 (后序中序求层序)
    L2-004 这是二叉搜索树吗?
  • 原文地址:https://www.cnblogs.com/gaoyuanzhi/p/9339756.html
Copyright © 2011-2022 走看看