sp朱盼的gravatar头像
sp朱盼 2018-08-27 14:11:34

数据库表结构设计

各位大神,请问一下,现在有一张用户表,有一张商品表,现在业务需要方便查询同时购买某几种商品的用户有哪些?请问订单表应该如何设计?或者说还需要增加一些什么表来满足这个业务需求?万分感激!

所有回答列表(6)
sweets_wn的gravatar头像
sweets_wn  LV4 2018年8月29日

通过订单表(订单ID<key>,用户ID,商品ID,...),是可以实现这个需求的,只是sql稍微复杂点。

如果想查询方便,建议新增一张用户商品表(用户ID<key>,商品IDs),user_sp(user_id,sp_ids),数据格式如:user01,sp01|sp02|sp03|,(注意:每个商品ID后面都跟一个|分割符,以便查询)

以Oracle数据库为例,查询同时购买商品01、商品02的用户,对应sql如下:

select distinct user_id from user_sp where instr(sp_ids,'sp01|')>0 and instr(sp_ids,'sp02|')>0;

 

评论(1) 最佳答案
sayHelloWorld的gravatar头像
sayHelloWorld  LV22 2018年8月28日

新建一张用户商品表,记录用户购买的商品信息

栈道小生的gravatar头像
栈道小生  LV10 2018年8月28日

首先用户表 要有 id name  用户状态  商品id  这个一对多关系 ,商品表需要 商品状态 商品类型 商品名称 ,可以做平行关系 ,也可以做一个中间表 只有 用户id 和商品id ,这样查询很方便

西洲尐的gravatar头像
西洲尐  LV10 2018年9月6日

首先数据表的设计要遵循几个重要的范式,表中不可出现与主键无关的字段,字段尽量做到不可拆分。用户表除了记录用户基本信息外,还要考虑逻辑和状态字段,商品表当然包括商品信息以及用户id以确保多对一的关系,其次还要建立分类表,中间表确定多对多的关系,好处是好维护,查询快,而且很多框架都支持这种关联模型。

sindia的gravatar头像
sindia  LV4 2018年9月27日

用户商品表没什么异样的呀,就订单号,产品号,至于分析同时购买的商品,评论1已经是有特指商品的,如果仅分析哪些产品总是被同时购买,可以用自连接,再group按次数排序

adria2015的gravatar头像
adria2015  LV11 2018年10月23日

数据库设计应该满足三大范式:原子性、相关性、直接相关性。

用户表(a_user):uid,username
商品表(a_good):gid,gname,gtype,g_price(单价),g_num(库存)
订单表(a_order):oid,uid,o_date,o_state(已付/未付)
订单明细表(a_order_detail):did,oid,gid(商品id),g_price(购买价格),g_num(购买数量)

查询同时购买某几种商品的用户?

select u1.*
from a_user u1,a_order o1,a_order_detail d1
where u1.uid=o1.uid and o1.oid=d1.oid and d1.gid in (1,3,5,7,9)

顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友