简单点说二三级分销系统,

1、用户通过分享链接促成商品卖出,获取到一定比例的商品利润。2、用户促成交易获得一定比例的利润时,其上级用户也会获得一定比例的利润。

对于本人所设计的分销系统,与二三级分销系统还是有很大的差别,

只要是上级用户,其下级或无线下级的用户一旦获取利润,其都可以获得一定利润比咧,而类似于微信的二三级分销系统,是只有连续的三级用户才可以获得利润。

这里只为解决这些需求所带来的技术难题,不做实际应用。

由上我们可以分析出一些内容

数据库设计方面:用户表的设计,用户的上下级关系如何设计,推广链接的数据库存储,用户与推广链接的数据存储

网上看到用户上下级关系有很多存储方式,

比如:

方法一、

用一个tree字段存储字符串来表示该节点的父级关系,比如A用户是根节点,则tree字段存储的值为 "/"

表示A根节点为空。

A是B用户的上级,则用户B的数据库中tree为 "/A/" ,

B用户的下级是C用户,则C的tree 是 "/A/B/"

这样要数据库查找A的所有子节点数据的时候sql语句为:

SELECT * FROM user WHERE tree like '/A/%'

将查询出来的数据进行递归遍历。

这样可以很简单的查询出A的子节点数据,大部分公司都是采用这种 id, parent_id, tree(或者叫字段:parent_ids) 方式进行树型数据设计

如果要找到当前用户的所有上级用户,如查找C用户上级  ,  则可以直接使用用户数据的tree字段,使用 / 分隔符进行分割,按照前后顺序,分割后的元素顺序就是C的父节点路径

这个查找上下级时间复杂度是O(n),但是新增一个下级用户,或删除下级用户时,这个操作可能会变了很复杂,要修改所有相关的tree字段

方法二、

还有一种引入左右值数据的方法,也就是增加left和right字段

基于Tree的前序遍历的无递归查询、无限分组的左右值编码方法

图片来源链接

https://www.cnblogs.com/huey/archive/2015/05/21/4518979.html

左右值编码方法还不会使用,只能暂时放弃,看的头晕怎么破啊

资料来源:https://blog.csdn.net/monkey_d_meng/article/details/6647488

最后本人还是使用相对原始的方法,

方法三、

继承关系,

设置一个Parent_id的方式进行树的存储,

用递归的方式进行遍历某个节点的子孙节点,获得节点的唯一一条父节点列表。

写的一个大概得代码描述,可以借鉴

补充下遍历下级用户的方法,但数据返回给前端后有点复杂,要js循环解析json数据

/***

*@paramid

*@return

*/

public JSONArray searchSubCustomer(intid) {/*** 这里只查询用户下一级的子用户。

* 有数据情况下,遍历其子用户,

* 当如果该用户没有子用户,即返回为null时,直接返回null并且结束这个方法,可在for循环中看到逻辑处理*/// 这部分sql查询,按照自己的方法数据库查询,这个查询是调用JFinal框架的ActiveRecordPlugin 这个插件进行数据库查询

List customerList =Customer.dao

.find("SELECT * FROM customer WHERE id IN (SELECT id FROM customer WHERE parent_id=?)", id);if (customerList == null) {return null;

}

JSONArray jsonArray= new JSONArray();//这个用来保存所有的数据集,嵌套使用

for(Customer customer : customerList) {//这个通过传递用户id,进行递归查找其所有下级用户。如果返回null,说明其没有下级,直接将//它自己放进jsonArray数据中。

JSONArray temp = searchSubCustomer(customer.getInt("id"));

JSONObject jsonObject= newJSONObject();if (temp == null) {//没有下级,直接放自己

jsonObject.put("self", customer);

jsonArray.add(jsonObject);

}else{//有下级,放自己的同时,另起一个subUser为key放所有下级

jsonObject.put("self", customer);

jsonObject.put("subUser", temp);

jsonArray.add(jsonObject);

}

}returnjsonArray;

}

获得的结果类似于下面结构,如果没有下级直接返回空,即[ ]

只有一个下级则会返回下级本身,即 [ {self:下级对象} ]

如果下级还有下级,则结构为 [ {self:下级对象自身},subUser:[ 下级集合数组 ] ]

[

{slef:object},

{self:object,

subUser:[

{self:object,

subUser:[]

},

{...}

]

},

{self:object}

]

可能我的数据量比较小,感觉用着速度还是很快了。可能数据量比较大的场景不适合,要使用sql的存储过程来提高查询速度。

能用就好吧!

用户与推广链接的关系,直接使用逻辑上(不加外键约束)外键连接即可,进行分润时候,直接使用List存储父子关系,反向进行分润即可。

可参考数据库代码:

php三级分销思路 数据库设计_分销系统的用户关系,用户与推广链接的数据库设计。设计思路...相关推荐

  1. mysql好友关系数据表设计_社交系统中用户好友关系数据库设计

    基础分析 第一步,有一张用户表,表内包含用户的基本信息,比如账号.姓名.性别等信息.这里用tb_user表示用户信息表. ID用户名 1张三 2李四 3王五 4赵六 第二步,需要将用户与用户直接建立好 ...

  2. tde数据库加密_如何将TDE加密的用户数据库添加到Always On可用性组

    tde数据库加密 SQL Server Transparent Data Encryption, also known as TDE, is a "data at rest" en ...

  3. 支付退款流程设计_【系统架构】如何设计一个简单灵活的收银系统?看这里!(1)...

    在电商项目中,收银系统是一个不可或缺的功能,因为你不仅要通过它来进行收款.退款,而且也要通过它进行财务的对账.报税等.因此,如何设计一个简单灵活的收银系统,对于开发电商项目来说非常重要. 那如何设计一 ...

  4. feed mysql表设计_微博系统动态feed数据库设计。

    推方式 推方式,是发生在用户触发行为(发布新的动态,关注某个人,点赞)的时候.在触发时,用户的自身行为会记录到对应的行为表中,其次用户的行为也会记录到自己的粉丝对应动态表中. 这里写图片描述 用户A发 ...

  5. java 操作日志设计_日志系统新贵 Loki,确实比笨重的ELK轻

    本文同步Java知音社区,专注于Java 作者:linkt1234http://blog.csdn.net/Linkthaha/article/details/100575278 最近,在对公司容器云 ...

  6. 金仓数据库字段_技术干货 | 超实用!详解人大金仓MPP数据库并行查询技术

    什么是MPP数据库? 人大金仓MPP数据库的 并行查询技术原理是什么? 如何实现并行查询?性能如何? 且听以下详细分解~ 01 什么是人大金仓MPP数据库? KingbaseAnalyticsDB(简 ...

  7. 阿拉伯语排版设计_针对说阿拉伯语的用户的测试和设计

    阿拉伯语排版设计 Let me start off with some data to put things into perspective "Why?" 让我从一些数据入手,以 ...

  8. 响应式网站设计_通过这个免费的四小时课程,掌握响应式网站设计

    响应式网站设计 This video tutorial from Kevin Powell teaches you to build responsive websites from scratch. ...

  9. python下俄罗斯方块的游戏设计_[源码和文档分享]基于Python的PyGame的俄罗斯方块游戏设计与实现...

    摘 要 近年来,随着游戏产业的突飞猛进,游戏玩家的技术也是与日俱增,当你看见游戏高手完美的表演时,你是否想过我也能达到那种水平,本程序用Python语言编写俄罗斯方块,左侧显示正在运行的游戏,右边显示 ...

最新文章

  1. 浏览器URL地址里一堆%或者6E616D6531之类的是啥?编码
  2. 十七、深入Python异常处理
  3. c++11-decltype
  4. Azure Lambda Function创建失败 - 400 bad request和成功 - 201 Created
  5. ssl2348-连接格点【图论,最小生成树,并查集】
  6. 深度学习 —— 使用 gensim 实现 word2vec
  7. 惊!微信可以转发语音了?!
  8. 《iOS移动开发从入门到精通》图书连载2:如何成为一名iOS开发者
  9. 控制反转 vs 依赖注入
  10. vue异常报错解决 Missing ref owner context. ref cannot be used on hois 或者是 Cannot read property ‘refs‘ of n
  11. 正确的选择大于努力_选择正确技术的11个注意事项
  12. 对话框程序, 在 OnInitDialog的最后 showWindow(SW_HIDE),不管用的原因
  13. 英语日常用语900句(3)
  14. 机器人学中雅可比矩阵求导计算(Angeles法)
  15. 计算机主机箱工作电流,计算机主板上所用到的电压标准
  16. nodeJS Express 删除 x-powered-by
  17. 数据库 物化视图详解
  18. 日语二级语法汇总(part5/16)
  19. 23个设计模式的简明教程
  20. windows之nslookup命令

热门文章

  1. vivo社招面试流程,坐标南京
  2. 今日头条开通,分享我爱的数码科技
  3. 码分多址(CDMA),码片序列简单理解
  4. csv转excel在线工具
  5. 牛逼!腾讯竟然打响了反对996的第一枪....
  6. Leetcode 1125:最小的必要团队
  7. 电子信息工程考研:12大专业方向解读
  8. python中安装excel使用的模块
  9. 矩形法求定积分c语言流程图,矩形法求定积分其程序与程序框图的实现.doc
  10. 信息学奥赛 一本通:1194:移动路线