现在有一个需求要解决,需求如下:
产品需要在不同的终端显示,有PC, WAP, WX(微信), APP等4个终端,这些产品需要在上面4个终端中的一个或多个中显示,请问,数据库怎么设计。
最传统的做法,在产品表中加一个字段,显示类型 client_type varchar(100)
如果要在PC端显示,就保存为PC
如果要在PC、APP端显示,就保存成PC,APP
如果要在PC、WAP、WX端显示,就保存成PC,WAP,WX
等等...
如果要查询在PC端显示的产品列表,则SQL为:select * from tb_product where client_type like '%PC%'
这种方式简单明了,但是效率比较低
现在有一种,使用位移的做法,如下
首先定义PC=1、WAP=2、WX=4、APP=8
在产品表中加一个字段,显示类型 client_type int
如果要在PC端显示,就保存为1(PC)
如果要在PC、APP端显示,就保存成9(PC+APP)
如果要在PC、WAP、WX端显示,就保存成7(PC+WAP+WX)
等等...
如果要查询在PC端显示的产品列表,则SQL为:select * from tb_product where 1&client_type=1如果要查询在APP端显示的产品列表,则SQL为:select * from tb_product where 8&client_type=8
即:判断是否显示的方式为:value&client_type == value
这种方式,使用的是位移,运算速度快,效率高。