好,你说的好轻巧呀,这样的话,订单表就不能与客户信息表关联了,就要与“客户信息变更表”关联了,而且关联字段也不是简单的“客户id”了,而是客户id+月份,此时需要另外创建一个客户信息变化表,也要一月一个,即每月保存一份客户的当月信息。
这会使表的关系复杂很多,而且每次 select 时,订单表都要 按照月份与客户id去left join“客户信息变更表”,代码看着就麻烦。其实在订单表中,多加几个字段就全好了,何必再关联更多的表呢?想不明白。
这会使表的关系复杂很多,而且每次 select 时,订单表都要 按照月份与客户id去left join“客户信息变更表”,代码看着就麻烦。其实在订单表中,多加几个字段就全好了,何必再关联更多的表呢?想不明白。
====
这种考虑特殊情况的思维方式会把问题复杂化。本质上,这依然符合关系理论3NF的要求:如果一个Email依赖于客户ID(即客户的当前Email),则这个字段应该放在客户表,放在订单表则违反3NF;
如果一个Email依赖于订单ID(即订单的关联Email),则这个字段应该放在订单表。
这个Email字段依赖于哪个ID,取决于系统需求。LZ的情况,需要客户表有一个Email字段表示客户当前最新Email,订单表有一个CustomerEmail字段表示订单关联的客户Email。当然,客户信息变更历史表也需要有,主要是为了记录历史信息;把历史表与订单表关联,会增加问题复杂度。