gulimall mysql数据库总结
复杂表间关系分析
表间关系建立方案
数据库表间关系一般分为三种:一对一、一对多、多对多。
-
一对一:一般两表分别存储对方primary_key。
如husband表中一条记录,对应wife一条记录,互相持有对方id
-
一对多:可以让多表储存一表的primary_key(主推),也可以另建一张关联关系表。
如teacher表中1条记录对应student表中的10条记录,可以让10个student分别保存老师的id信息。也可以创建关联关系表
-
多对多:创建关联关系表,专门储存两者对应关系
如class表中的一条记录对应student表中的多条记录,student表中的一条记录对应class表中的多条记录。
表内字段
一般一张数据表中主要有三类信息,信息均可选
-
基本信息字段:sku_name、sku_desc、sku_title等
用于储存表中储存的业务信息,如sku表储存sku的具体内容
-
关联信息字段:spu_id
用于与其他表建立关系
-
冗余字段:catalog_id、brand_id
用于储存常用字段,尽量避免多表查询
数据库操作注意点
- 多表更新很少用外键,一般单独使用事务:单机使用传统事务,集群开启分布式事务,或使用可靠消息保证数据一致性。
- 多表联表查询,不要join,将一次join拆成多次select,避免casandra积问题。
- 若有其他表采用冗余数据的方式存储了信息,操作原表的时候,还要操作冗余表
- 当存储url等大字段的时候,建议拆成1对1的表单独存储。参考资料:https://www.cnblogs.com/chenpingzhao/p/6719258.html
Springboot操作数据库时注意事项
-
最好针对单表创建po、dao、service、controller
-
对于关联表A_B_relation,会经常涉及A和B的信息查询。
如果查询多,更新少,建议存储冗余数据。如果查询少,更新多建议每次现查