1、一对一关系

子表中添加外键列关联父表的主键

2、一对多关系

一个实体可以关联多个其他实体实例,但每个实例只能属于一个父实体,在"多"的一方表中添加外键列关联"一"的一方的主键

3、多对多关系

创建中间表(关联表),包含两个外键分别关联两个表的主键

例子:电商系统

  1. 用户user
  2. 商品:product
  3. 订单:order

分析:

  1. 用户-商品:没有关系
  2. 用户-订单:一对多
  3. 商品-订单:多对多

各表初始设计:

  • 用户user
uidnameagesex
1000zhang20M
1020liu21W
2010wang22M
  • 商品product
pidpnamepriceamount
1手机600.0100
2笔记本2000.0199
3电池10200
  • 订单order
orderiduidpidnumbermoneytotalpriceaddrinfo
O10001000116004640海淀区
O100010002240004640海淀区
O1000100034404640海淀区
O200010202120002000海南

在订单表的最初设计中,订单表的很多行的列内容都是相同的,如果要添加一个商品,就需要同时修改很多行的内容,如总价格这一列,每一行都要修改totalprice这一列,这就是数据冗余存储,一个操作会导致大面积的相同数据的大面积修改,我们不需要存同一份订单的多个uid,totalprice和addrinfo,这些信息只需要存放一次就足够了


由于于订单和商品是多对多关系,可以增加一张中间表orderlist,用于存放订单内容,下面是修改后,order表和orderlist表的设计

订单order

orderiduidtotalpriceaddrinfo
O100010004640海淀区
O200010202000海南

订单内容orderlist

orderidpidnumbermoney
O100011600
O1000224000
O10003440