- SQL code
现在设计一个收费系统,需要保存一些收费标准,1、从城市到城市的收费2、是省份到省份的收费3、从城市到省份的收费4、从省份到城市的收费城市和省份是从属关系,如果你要 查询从广州到成都的收费标准,即使数据表没有广州到成都的标准,但是只要存在广东到四川,或广东到成都的数据,那么这些数据都是有效的。然而在设计这个收费表service_charge的时候,出现了一些问题,表结构设计如下编号 源id 目标Id 收费标准id source_ref_id destination_ref_id charge_ratesource_ref_id destination_ref_id列引用自city表或province表的id值设想界面查询时提供源和目的地的city_id或province_id,则查询语句为select * from service_chargewhere (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
------解决方案--------------------
想想基表的定义。