日期:2014-05-18  浏览次数:20361 次

这样的表该如何设计?
SQL code

现在设计一个收费系统,需要保存一些收费标准,
1、从城市到城市的收费
2、是省份到省份的收费
3、从城市到省份的收费
4、从省份到城市的收费

城市和省份是从属关系,如果你要 查询从广州到成都的收费标准,即使数据表没有广州到成都的标准,但是只要存在广东到四川,或广东到成都的数据,那么这些数据都是有效的。

然而在设计这个收费表service_charge的时候,出现了一些问题,表结构设计如下
编号  源id          目标Id             收费标准
id    source_ref_id destination_ref_id charge_rate

source_ref_id destination_ref_id列引用自city表或province表的id值

设想界面查询时提供源和目的地的city_id或province_id,则查询语句为
select * from service_charge
where (source_ref_id = @source_city_id  or source_ref_id = @source_province_id)
and  (destination_ref_id = @destination_city_id  or destination_ref_id = @destination_province_id)

但是现在觉得使用 or 效率很低,请问这个表怎么设计能够让效率最高?如果一张表不行,可否设计为多张表




------解决方案--------------------
我觉得charge表里应该只放city到city的记录。
省份到城市的价格,这个有意义吗...
然后加一个city-province的mapping table,如果用户查询是province到city的话,应该把所有这个province内的所有city结果显示出来。比如查询是四川到上海,那么结果应该是所有四川省内的city到上海的记录才有意义不是吗?


------解决方案--------------------
那不要分province_id和city_id呢?只用一个loc_id.
比如四川的loc_id是1000,成都的loc_id是1001.不需要or
------解决方案--------------------
想想基表的定义。