表基本模型结构
这里我们模拟一个商城的基本的表结。此结构由(用户、门店、导购、门店商品、订单、订单对应的商品)。其中,导购也是一个用户,门店是只属于一个店主的,同时店主本身也是一个导购也是一个普通用户。
结构图:
构造数据脚本
MySQL分库分表(1)-脚本
对业务场景进行模拟
- 场景1:购买者下订单。
1、从session中获得客户ID。
2、可以通过时间戳等拼凑一个订单ID(在创建表的时候为了方便我用自增的,在以下我们一直就吧订单ID看成不是自增的,是用程序生成的)。
3、从商品的店铺能获得到导购ID(获取规则我们这边认为是随机)。
4、可以从商品中计算出订单价格。
最终就能拼凑出下单的INSERT SQL语句(这边我就不真正写插入语句了)
1
2
3
4
5
6
7
8
9
10
|
SET autocommit=0;
START TRANSACTION;
— 创建订单语句
INSERT INTO orders VALUES(订单ID, 导购ID, 购买用户ID, 订单价格, 订单状态);
— 创建商品订单语句
INSERT INTO order_goods VALUES(NULL, 订单ID, 商品ID, 商品价格, 商品数量);
— 可以给添加多个商品到订单中
......
COMMIT;
set autocommit=1;
|
以上就是一个客户下单时要操作的,订单ID(订单号)是程序生成的,订单ID(订单号)是程序生成的,重要的事要说三遍。
- 情况2:购买者浏览订单
当用户查看订单列表的时候可以通过分页一次性获得自己的订单列表。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
— 每一页10行(这边顺便展示一下单数据量大时优化后的sql语句)
— 查找用户ID为100的订单
SELECT l_o.orders_id,
o.user_guide_id,
o.user_id,
o.price,
og.price
FROM (
SELECT orders_id
FROM orders
WHERE user_id = 100
LIMIT 0, 10
) AS l_o
LEFT JOIN orders AS o ON l_o.orders_id = o.orders_id
LEFT JOIN order_goods AS og ON l_o.orders_id = og.orders_id;
|
- 情况3:导购查看订单
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
— 每个导购也可以查看他销售了多少的订单
— 查找导购ID为1的销售情况
SELECT o.orders_id,
o.user_guide_id,
o.user_id,
o.price,
og.price
FROM orders AS o
LEFT JOIN order_goods AS og ON o.orders_id = og.orders_id
WHERE o.orders_id IN(
SELECT orders_id
FROM (
SELECT orders_id
FROM orders
WHERE user_guide_id=1
LIMIT 0, 10
) AS tmp
);
|
- 情况4:导购修改订单
1
2
|
— 这边我们修改订单金额就好,修改ID为1000的订单
UPDATE orders SET price = ‘10000’ WHERE orders_id=1000;
|
- 情况5:店主为店铺添加商品
1、我们可以根据操作的用户获得店铺名
1
2
|
— 添加商品伪SQL
INSERT INTO goods VALUES(NULL, 商品名, 商品价格, 店铺名);
|
文章转载来自:ttlsa.com