本文尝试用实际开发中常见的电商场景来厘清其背后需要的数据库中表与表之间的关系,目的在于能够分析出常见购物网站的中实体间的关系,并能创建出对应的表。
文章目录
1.实体间常见关系
-
购物网站中常有的实体一般包括:
- 用户 订单 商品 分类
- 这背后在数据库中都对应一张表来存放具体的数据,显然这些表之间不是孤立的,而是互相联系。
-
常见关系:
- 一对多:
- 用户和订单:一个用户可以拥有多个订单,但是一个确定的订单只能属于一个用户
- 分类和商品
- 多对多:
- 订单和商品:一个订单可以包含多个商品,而同一个商品可以出现在多个订单中
- 学生和课程
- 一对一:
- 丈夫和妻子
- 一对多:
-
ER图用来描述实体与实体之间的关系
- 实体用矩阵表示(一个实体对应一张表)
- 属性用椭圆表示(属性对应字段)
- 关系用菱形表示
2.数据库实现(一对多)
2.1一对多情况的引入
- 假设现在有一张用户表和一个订单表,里面数据的具体关系如图:
- 上述表示张三拥有订单1和2,李四拥有订单3,但是数据库中显然不可能有划线的方式来表示关系,所以为了解决这个问题,引入外键。
2.2利用外键实现一对多
以一对多为例:
- 在开发中,关系中的一方称之为主表或者一表,关系中的多方称之为多表或者从表,
为了表示一对多的关系,一般会在多表的一方添加一个字段,字段名称自定义(建议:主表的名称_id)
字段类型一般和主表的主键的类型保持一致,我们称这个字段为外键 - 所以为了表示上述关系,我们需要在订单表中添加一个字段user_id
2.3数据库实现(一对多)
2.3.1不设置外键的情况
- 1.创建用户表
create table user(
id int primary key auto_increment,
name varchar(20)
);
- 2.创建订单表