現在有一個需求要解決,需求如下:
產品需要在不同的終端顯示,有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
這種方式,使用的是位移,運算速度快,效率高。