极具挑战的SQL难题,看看你对SQL熟悉多少
客户要求灵活的价格体系,要求如下
商品会存在多个地区价格,同一地区又存在多个价格类型,不同价格类型的价格不一样,比如同样是一瓶百事可乐,
在北京的价格如下:
价格A:2.7
价格B:2.8
价格C:2.85
价格D:2.9
价格E:3.0
。。。。。。。
在拉萨的价格如下:
价格A:2.2
价格B:2.3
价格C:2.4
价格D:2.5
价格E:3.6
价格F:3.7
在四川的价格如下:
价格A:3.2
价格B:4.3
价格C:5.4
价格D:6.5
价格E:7.6
价格F:8.7
。。。。。。。
请问你们如何处理这个问题(在数据库设计上,是用列扩展还是行扩展)
我的初步考虑方案:
1、 在商品资料表上增加字段, 用2个字段描述商品的价格
字段A代表价格类型
字段B代表价格类型所对应的值
字段A:A,B,C,D,E,F,G,H
字段B:1,2,3.5,2.23,3.5
2、用一个表来记录各商品的价格,一个价格类型对应一行
商品编码,价格类型 ,价格
00001 A 2.3
00001 B 1.3
00001 C 7.3
00001 D 6.3
............
但是问题来了,在查询商品资料的时候,第一个方案,存在的需要转换分解(从一个字段分解成多个价格字段表示)
第二个方案,存在大量冗余,造成数据量非常大,查询速度慢
在此听听你们的高见 !!!!!!!!!!!!!
欢迎和我讨论 QQ 110855663
[解决办法]
DECLARE @GOODS TABLE(GOODSID INT PRIMARY KEY,GOODSNAME NVARCHAR(50))INSERT INTO @GOODSSELECT 1,'可乐'UNION ALLSELECT 2,'雪碧'DECLARE @GOODS_PRICE TABLE(GOODSID INT,AREA NVARCHAR(50),PRICETYPE NVARCHAR(50) ,PRICE NUMERIC(19,6))INSERT INTO @GOODS_PRICESELECT 1,'北京','价格1',1.11UNION ALLSELECT 1,'北京','价格2',2.22UNION ALLSELECT 1,'上海','价格1',3.33UNION ALLSELECT 1,'上海','价格2',4.44UNION ALLSELECT 2,'北京','价格1',5.55UNION ALLSELECT 2,'北京','价格2',6.66UNION ALLSELECT 2,'上海','价格1',7.77UNION ALLSELECT 2,'上海','价格2',8.88SELECT GS.GOODSID,GS.GOODSNAME,GP.AREA,GP.PRICETYPE,GP.PRICEFROM @GOODS GSLEFT JOIN @GOODS_PRICE GPON GS.GOODSID=GP.GOODSIDORDER BY GS.GOODSID,GP.AREA,GP.PRICETYPE,GP.PRICE/*1 可乐 北京 价格1 1.1100001 可乐 北京 价格2 2.2200001 可乐 上海 价格1 3.3300001 可乐 上海 价格2 4.4400002 雪碧 北京 价格1 5.5500002 雪碧 北京 价格2 6.6600002 雪碧 上海 价格1 7.7700002 雪碧 上海 价格2 8.880000*/
[解决办法]