购物车的实现可以使用多种方式,主流的有以下3种:
存储在用户游览器中:如使用cookie记录,也可以使用HTML5的本地存储等
存储在服务器中:存储在用户会话(session)中,用户在关闭游览器后存储信息会被销毁
存储在数据库中:可以存储在Mysql、Redis等数据库中
下面以Mysql存储用户的购物车信息,这样用户无论何时都可以看到自己的购物车历史记录。购物车表(goods_shopcar)设计见图
购物车表goods_shopcar的SQL语句如下:
CREATE TABLE `goods_shopcar` (
`id` int(4) NOT NULL ,
`uid` int(10) NULL ,
`goods_id` int(10) NULL ,
`num` int(10) NULL ,
`status` tinyint(4) NULL ,
`create_time` int(10) NULL ,
`update_time` int(10) NULL ,
PRIMARY KEY (`id`)
);
表设计中关键字段为uid和goods_id,可以记录那个用户加入了那个商品。num则记录了某个商品的加入的数量。
既然有购物车那么就会有支付功能,发起支付的时候需要发送一个唯一的订单号给微信服务器,这样在通知的时候才可以了解该修改那条订单记录。另外订单的核心就是记录那个用户买个那些商品,并提供支付等相关的状态管理。订单表(db_order)设计见图
订单表order的SQL语句如下:
CREATE TABLE `order` (
`id` int(4) NOT NULL ,
`order_number` varchar(50) NULL ,
`uid` int(10) NULL ,
`pay_price` double(20,2) NULL ,
`is_pay` tinyint(4) NULL ,
`pay_time` int(10) NULL ,
`is_ship` tinyint(4) NULL ,
`ship_time` int(10) NULL ,
`is_receipt` tinyint(4) NULL ,
`receipt_time` int(10) NULL ,
`ship_nmber` varchar(100) NULL ,
`status` tinyint(4) NULL ,
`create_time` int(10) NULL ,
`update_time` int(10) NULL ,
PRIMARY KEY (`id`)
);
因为用户可以一次性购买多个商品,所以用户订单与商品是一对多的关系。设计的订单商品表(order_goods)见图
订单商品表order_goods的SQL语句如下:
CREATE TABLE `order_goods` (
`id` int(4) NOT NULL ,
`order_id` int(10) NULL ,
`goods_id` int(10) NULL ,
`goods_num` int(10) NULL ,
`goods_price` double(20,2) NULL ,
`status` tinyint(4) NULL ,
`create_time` int(10) NULL ,
`update_time` int(10) NULL ,
PRIMARY KEY (`id`)
);
订单表(order)只是记录了商品的总支付金额(pay_price),所以在订单商品表(order_goods)中设计记录了每个商品的购买价格(goods_price),这么做是inwei商品的价格会动态调正,而订单需要保存历史价格信息。
