基于多变量计算费率的数据库设计

时间:2010-11-25 20:12:46

标签: database database-design ms-access

我一直在研究MS 2010 Access数据库来计算CSV输入货物的费率。

费率通常由原始城市,原产国,目的地城市,目的地国家,可能的中途目的地城市,重量,体积和数量来区分。这些变量的唯一组合将指定另一个变量列表,用于通过将这些变量与权重,体积或数量相乘并将它们相加来计算最终费率。

一个问题是城市和国家名称/拼写不一致。我的另一个担忧是,我觉得我可以将数据分成多个表,但不确定如何最好地实现这一目标。

编辑: 谢谢你的批评。我的问题是,构建这个数据库的最佳方法是什么?这是我的表的简化示例:

费率(startCity,startCountry,midCoun,midCountry,endCity,endCountry,type,weight,volume,baseRate,feeA,feeB,feeC,delivery,fuel)

一切都在一个表中,并且它实际上没有唯一的标识符/密钥。相反,每条线都是唯一的,因为至少有一个位置或类型不同。

csv输入: shipmentID,startCity,startCountry,midCity,midCountry,endCity,endCountry,type,weight,volume,qty

查询输出: shipmentID,{qty * [baseRate + weight *(feeA + feeB)+ volume *(feeC)+ delivery + fuel]}

1 个答案:

答案 0 :(得分:1)

我不确定我理解你的问题。如果您正在寻找数据库结构,我会提出以下3个表:

位置(id,cityname,zipcode,country_ID)

国家/地区(id,countryname)

路线(id,startlocation_ID,midlocation_ID,endlocation_ID,ratefactor)

最终费率可能基于公式。公式的路径相关部分需要作为“ratefactor”放入“route”表中。是否需要将公式的其他部分放在表中,将取决于公式本身(您没有告诉我们足够的内容)。输入城市/国家/地区名称应使用下拉列表进行,用户只能在已输入的列表中进行选择。大多数情况下,您的用户可能会使用已经输入的常规路线的路线表。如果你的公司确实服务于世界上的任何地方,你当然不能让他们自己一直输入新的城市名称。

更新:编辑完成后,我建议您深入了解database normalization的主题。例如,您的“费率”表似乎会有许多相同的路线,仅在重量上有所不同。因此,按照我的建议,单独保留路线信息是有意义的。附加信息应放在单独的表格中(引用:id,route_ID,type,weight,...)。

“(feeA + feeB)”和“feeC”似乎是我在我的建议中提到的比率因素。但我没有看到同时使用feeA和feeB的原因,因为它们在使用之前总是加在一起。如果它们是指连接到城市的价格,并且您需要将这些信息分开,那么最好将价格信息保存在不同的表格中( connectionprice :id,locationA_ID,locationB_ID,定价并且每次重新查看它而不是进入它。

虽然有人可能会说你不需要一个单独的PK,如果你有不同的字段,其组合产生一个唯一的标识符,我会养成为每个表创建一个(“id”)的习惯。几乎总是它使编程访问和信息检索变得更加容易。