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

数据库表结构设计

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

所有回答列表(6)
sweets_wn的gravatar头像
sweets_wn LV48月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 LV228月28日

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

栈道小生的gravatar头像
栈道小生 LV68月28日

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

oliver1234的gravatar头像
oliver1234 LV69月6日

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

sindia的gravatar头像
sindia LV49月27日

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

adria2015的gravatar头像
adria2015 LV1110月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)

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