zoukankan      html  css  js  c++  java
  • Mysql外键和表关系

    外键foreign key

    什么是外键?

    外键就是用来连接别的库,让两种表有代码层面上正真的关联

    外键的约束:

    在创建表的时候必须先创建被关联的表。

    插入数据的时候 也必须先插入被关联表的数据

     

      


      

    关系

    在数据库中,将实体与实体的关系反应到表的设计上来,可以细分为 3 种,分别为:一对一(1:1),一对多(1:N)(或多对一(N:1))和多对多(N:N)

    在此,所有的关系都是指表与表之间的关系。

    一对一

    一对一,即一张表的一条记录只能与另外一张表的一条记录相对应,反之亦然。

    例如,咱们设计一张「个人信息表」,其字段包含:姓名、性别、年龄、身高、体重、籍贯和居住地等。

    0

    如上表所示,基本满足咱们的要求,其中姓名、性别和年龄属于常用数据,但是身高、体重、籍贯和居住地为不常用数据。如果每次查询都要查询所有数据的话,那么不常用数据就会影响效率,而且又不常用。因此,咱们可以将常用的数据和不常用的数据分离存储,即分为两张表,例如:

    表 1:常用数据

    1

    表 2:不常用数据

    2

    如上面表1表2所示,通过字段ID表1中的一条记录只能匹配表2中的一条记录,反之亦然,这就是一对一的关系。

    一对多

    一对多,即一张表中的记录可以对应另外一张表中的多条记录,但是反过来,另外一张表中的一条记录只能对应第一张表中的一条记录。

    例如,咱们设计「国家城市表」,其包含两个实体,即国家和城市。

    表 3:国家表

    3

    表 4:城市表

    4

    如上面表3表4所示,通过字段国家表3中的一条记录可以匹配表4中的多条记录,但反过来,表4中的一条记录只能匹配表3中的一条记录,这就是典型的一对多的关系。

    多对多

    多对多,即一张表中的记录可以对应另外一张表中的多条记录,反过来,另外一张表中的一条记录也可以对应第一张表中的多条记录。

    例如,咱们设计「教师学生表」,其包含两个实体,即教师和学生。

    表 5:教师表

    5

    表 6:学生表

    6

    观察上面的表5表6,咱们会发现:表5表6的设计满足了实体的属性,但没有维护实体之间的关系,即一个老师教过多个学生,一个学生也被多个老师教过。但是无论咱们在表5中还是在表6中增加字段,都会出现一个问题,那就是:该字段要保存多个数据,并且还是与其他表有关系的字段,不符合设计规范。因此,咱们可以再设计一张「中间表」,专门用来维护表5表6的关系。

    表 7:中间表

    7

    观察上面的表5表6表7,咱们会发现增加表7之后,咱们维护表5表6的关系更加方便了!无论是想从表5通过表7查到表6,还是想从表6通过表7查到表5,都非常容易啦!这就是典型的多对多的关系。

     

     

  • 相关阅读:
    今天面试一些程序员(新,老)手的体会
    UVA 10635 Prince and Princess
    poj 2240 Arbitrage
    poj 2253 Frogger
    poj 2485 Highways
    UVA 11258 String Partition
    UVA 11151 Longest Palindrome
    poj 1125 Stockbroker Grapevine
    poj 1789 Truck History
    poj 3259 Wormholes
  • 原文地址:https://www.cnblogs.com/pscly/p/11386310.html
Copyright © 2011-2022 走看看