说完一对一的表结构设计,咱们现在说一下一对多表结构的设计。
首先一对多表结构的设计是在咱们在开发中应用最多的一个,这个设计是非常重要的,所以必须要掌握。
举个例子,咱们搞了一个叫员工的表结构,还有叫部门的一个表结构。这2张表如果从真正的需求上讲的话,其实就是一个一对多。
怎么理解呢,很简单,咱们一个部门下是可以有很多个员工的,但是员工表里面的员工它只属于某一个部门,所以这就是一个标准的一对多表结构,这是一个场景。
再举个例子,假如说我们有一个用户表,还有一个叫订单表,这2张表其实也可以是一个一对多的关系。用户表还可以把它叫做一方表,订单表咱们也可以把它叫多方表,这个怎么理解?假如双11的时候,用户A买很多的产品,它生成了一个订单,到双12用户A买了很多商品,它又生成了一个订单,这就表示一个用户可以产生多个订单,对吧。反过来一个订单它只能属于某一个用户,对吧。所以,这也是一个标准的一对多。如果以后大家在生活中或在真正的需求当中遇到类似这样的场景的话,那么咱们就可以把这种场景用一对多表结构的方式来设计就OK了。
清楚了这个场景,我们如何设计一对多表结构呢?
首先一对多表结构设计,它包含的是两张表,那两张表咱们一般有一个叫法,我们把一方表又称之为主表,就像咱们这个部门表,还有用户表;还有多方表也可以称之为从表,就好比说上面的员工表或者是订单表,它都属于多方,所以说一对多应该是两张表。
接下来我们讲一下一对多建表的原则。
那怎么来创建这2张表呢?原则是要在多方表当当中添加一个字段,咱们把这个字段作为外键,然后让它指向一方表的主键,这实际上就是一对多建表的一个原则。记住,只要是一对多,咱们以后都是这样的来创建他们相关的表结构的。
咱们以用户表和订单表为例进行说明:
首先创建2张表(用户表和订单表),用户表设置用户id为主键;
![bca0ed7ee1b2bfb7ea3ab2dbf85126c3.png](https://i-blog.csdnimg.cn/blog_migrate/d2143c7647f53ef102d72e62675ff300.png)
订单表
![b553d1d823ea978e04222dc384119f2a.png](https://i-blog.csdnimg.cn/blog_migrate/d5c3bf13f0dc3159044f0cfaa82fe17b.png)
为了让这2张表产生一对多的关系,我们要在多方表也就是订单表里面设置一个外键(比如,咱们创建的用户id把它设置为外键,这个外键的字段名称无所谓),创建完外键之后,把这个外键指向一方表(用户表)的主键,只要创建了外键约束,字段用户id的取值就只能来自于主表(用户表)主键的取值;
也就是,如果要往订单里面插入数据的话,只能插入已经存在的用户id生成的订单,这个时候去插入一个订单且用户id为’4’,结果就会报错;
只要遵循这个原则,用户表和订单表就具备了一对多的关系。比如,如上图,A用户就同时拥有2个订单分别为订单1和订单2,那每个订单只能被一个用户所拥有,这就是咱们说的一对多表结构设计。