数据库建表小技巧

自古美人都是妖i 提交于 2020-01-10 12:26:19

E-R总图:

先判断是什么关系:

1)一个用户能对应多个订单,而一个订单只能对应一个用户,所以是一对多的关系(不需要中间表:在多方加外键)

2)一个订单可以有多个商品,一个 商品也能出现在多个订单上,所以是多对多的关系(需要中间表,外键都在中间表(多方)        出现)

 

分析:

先确定三张基本表,user、product、order
分析用户user、商品product、订单order三者关系
1、user和order是一对多关系,其中user是一,order是多,即每个user可拥有多个order,而每个order只能属于一个user。一对多关系的两张表建立关联,不需要额外创建中间表,只需在多的一方表中增加外键列,将一的一方主键引入即可。
结论:user表不需改动,order表额外增加外键列uid

 


2、order和product是多对多关系,多对多关系的两张表建立关联,需要创建中间表将之拆分成两个一对多关系。
新建订单项表orderItem记录订单项,每行记录一个订单项。
product和orderItem是一对多关系,其中product是一,orderItem是多,即每个product可属于多个orderItem,而每个orderItem只能包含一个product。需要在多的一方,即orderItem表增加外键列pid。
order和orderItem是一对多关系,其中order是一,orderItem是多,即每个order可包含多个orderItem,而每个orderItem只能属于一个order。需要在多的一方,即orderItem表增加外键列oid。
结论:新建订单项表orderItem,额外增加两个外键列pid和oid

注意:如:一个订单可以有商品,此时如果在订单表中多个商品明显不符如

          订单号1   用户名  时间 商品1 价格

          订单号1   用户名  时间 商品2 价格

此时用关联表解决


最终设计:
建立四张表user(主键uid)、product(主键uid)、order(主键oid,外键uid)、orderItem(主键Itemid,外键pid和oid)

 

java中的实体类设计:

如上面的表:

用户类:
 

Class User{
private Long id;

private String username;

private String password;
}

商品类:

Class Product{
private Long id;
private String name;
private BigDecimal price;
private int count;
}

订单类:(此时订单一对多,所以在此用List,由于关联表下有count,所以只能在product类中加上count)

Class Order{
private Long id;
private Long number;
private Date createTime;
private User user;
private BigDecimal price;
private List<Product> products;
}

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!