Laravel的mysql数据分离想法

问题产生

good_orders表 (商品订单表)(已支付成功了的订单)
    addr_id  关联的地址表id
    good_id  关联商品表id
    user_id  关联的用户表id
    ....


goods (商品表)
    title 名字 
    img 封面
    price 价格
    .... 

addresses (地址表) 
    ......
  1. 如果运维修改商品 (goods),那么商品订单表随之受到影响
  2. 用户修改地址 (address),那么地址也会随之受到影响

如何避免这种情况 ?
(普遍解决方案: 就是商品订单表增加字段 good_data address_data,用json存储….)

我的解决方案

创建 good_orders时,
新增一条goods数据 和 addresses数据。

然后修改关联的字段。 (good_idaddr_id)

实现 (勿直接用 看最后面的”待优化”)

新建一个类

<?php

namespace App\Services;
trait ModelTrait
{

    public function copy($remote)
    {
        if( $this->$remote == null) // 模型关联不存在
        return true;

        $new_model = clone $this->$remote; //mo'b 要新增的数据

        $primaryKey = $new_model->getKeyName(); // 主键
        $new_model->$primaryKey = null; // 要把主键设置为null,不能存在两个相同的数据
        $new_model->exists = false;  // 设置为false才会新增  true会修改
        if( $new_model->save()){  // 新数据保存成功
        $foreignKey = $this->$remote()->getForeignKeyName();

         $this->$foreignKey = $new_model->id;  
        // 修改关联的外键值 如(`good_id` `addr_id`)

          return $this->save();
        }
        return  false;
    }

}

使用 use

Laravel的mysql数据分离想法

测试

Laravel的mysql数据分离想法

测试前 (goods表截不全 )

Laravel的mysql数据分离想法

测试后 (goods表截不全)

Laravel的mysql数据分离想法

待优化 (需自行实现)

很多条数据怎么办?

运维: 怎么突然多这么多的商品!
用户: 怎么突然多这么多的地址!
解决思路: 加个软删除 或者 status是否显示……

造成数据表很大?

那就建立一个 goods_tmp addresses_tmp表呗

订单查询的时候, 往goods_tmp addresses_tmp去查。

(是否有必要而已)

本作品采用《CC 协议》,转载必须注明作者和本文链接
专心学习不瞎搞
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 4

多加一个冗余字段的事,咋搞这么麻烦。。

3年前 评论
lyxxxh (楼主) 3年前

统计的时候你就爽了!

3年前 评论

你可以这样,主键做外键,修改的时候是新增,将之前的数据设置一个字段,然后新增记录 一般地址与商品不允许修改,还有订单表一定要记录金额,否则统计有苦吃

3年前 评论
lyxxxh (楼主) 3年前
lyxxxh (楼主) 3年前
乘风破浪 (作者) 3年前

订单收获地址可以新增一个订单发货表,和订单关联。 订单表只记录金额,不和商品表直接关联,增加订单详情表

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
未填写
文章
87
粉丝
105
喜欢
480
收藏
717
排名:109
访问:8.7 万
私信
所有博文
社区赞助商