首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

极具挑战的SQL难题,看看你对SQL熟悉多少,该如何处理

2012-01-30 
极具挑战的SQL难题,看看你对SQL熟悉多少客户要求灵活的价格体系,要求如下商品会存在多个地区价格,同一地区

极具挑战的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
 


[解决办法]

SQL code
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*/
[解决办法]
探讨
建议你分两个表

一个表是
商品地区表(商品,地区)
另外一个表是
商品价格表(商品,价格类型,单价)




[解决办法]
我觉得应该首先有每个商品有一个基础价格,任何一个价格都是在这个价格之上的一个百分比,对于不同的地区,使用的是某几种百分比,数据库里面不要存放商品价格,所有商品价格都是基础价格根据百分比计算出来的,不同地区和不同的百分比可以组成多种价格方案,

就想了这么多,
[解决办法]
从传统的数据库设计来看无非就是 扩展列或者行,讨论来讨论去的 有什么意思
楼主如果用的是新的数据库引擎的话sql2005 ,oracle 10g,db2 9.0或者更新的版本的话
不如考虑用xml把所有价格作为xml型数据放在商品表的里面,然后利用建立xml 索引,这样的话也就是
商品表里多个价格列而已,很方便的

我以前做过类似的开发关于权限管理的,sql2005 300多万的数据作还是可以的,当然服务器性能还是很重要的

热点排行