关系数据库 MySQL 设计

本文探讨了数据库设计中的关键原则,包括何时复制数据、冗余数据的使用、业务与分析表的区别、解开表间联系的重要性以及单一语意表的概念,强调了正确的数据库设计对于系统性能和维护的重要性。

三范式

 

表设计

1.什么时候该把数据copy一份到新创建的表?比如采购单派单后变成供应商的生产订单,那地址是通过关系使用采购单的,还是重新创建一个地址表,从采购表copy一份?

1)通过关系找采购单的地址,采购单地址改了生产订单也改了。

2)通过关系找采购单的地址,生产订单改了影响采购单的地址。

订单一般都是有限状态机,而且都是不可逆的,所以采购单派单之后肯定不能改的。生产订单的收货地址也基本是不会改的。

2.什么时候需要冗余数据?

1)冗余的字段不被修改,比如账号名。

2)不用连表查询,提高性能。

3)有快照的概念。

3.业务表,分析统计表要不同数据库,不同表结构。

业务表日常插入多,简单id查询。

分析统计都是宽表。查询多,插入少。

4.几张表一个业务模型,尽量解开与其他表的联系(领域边界问题)。

连表查询如果超出了业务模型,以后会很难拆分,做服务化。

本人经历过一个优化的工作,原来项目的很多地方需要得到用户名,mapper.xml就连表查询了,最后很难拆分出用户中心。

5.一张表就一个业务概念(有点像设计模式里面单一职责,现在叫单一语意)。

比如员工表(employee)id , name,age,status字段,如果有了账户表概念就会很麻烦,用员工表的name当账号使用会有如下问题。

有一天员工离职了,到了一家新公司但是还是使用你们云平台的系统,请问你该怎么办?离职员工表status状态改离职,

再入职改员工表与企业表对应关系?那员工履历岂不是没了?这种问题根本原因就是违背一样表只有一个语意,记住账号和员工是2个概念,账号自成体系,员工表属于公司组织结构,属于Hr系统的。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值