【发布时间】:2016-05-26 11:51:16
【问题描述】:
我正在使用 Magento 创建一个电子商务应用程序。我需要为此构建一个自定义运输模块。目前我正在设计表格来存储数据。
问题是当客户下订单时,我需要联系在该地点提供服务的运输公司,即取货和送货。一旦我获得了运输公司的详细信息,我需要向该特定地点收取运费。我问了一个关于如何存储密码和运输公司detail 的问题。
我得到的建议是创建一个如下表
Shipping Companies
--------
ID (int, PK)
Name (string)
Pincodes
--------
ID (int, PK)
Pincode (string)
These entities have a many-to-many relationship. So create a table to link them:
Shipping Company Pincodes
--------
ID (int, PK)
Shipping Company ID (int, FK)
Pincode ID (int, FK)
Pickup (bit)
Delivery (bit)
使用此表结构,我可以跟踪将提供取件和交付的运输公司。但是,一旦我有了这些运输公司 ID,我需要做的下一步就是收取运费以在该地点交付产品。我的一位同事提出的一个建议是存储密码范围,而不是存储所有密码。并且 row 将存储多个运输公司的费率 例如:
Pincode | Fedex Rate | DHL Rate | UPS Rate
----------------------------------------------------
67 - 69 7.7 6.5 5.5
但由于我存储了一系列密码,我将如何识别运输公司是否不提供该范围内任何密码的送货或取货服务。还有其他更好的方法来存储密码的运费。实际上有大约 19000 多个密码。我想为每个密码和运输公司存储单独的费率,但这会使表格变得非常大。
【问题讨论】:
-
“不提供”——听起来对
NULL很有用。 -
你需要一张“从'这里'到任何地方”的表格吗?还是一张“从anywhere到anywhere”的表格?
-
19000 行是“小”,而不是“大”。如果它被正确索引(
PRIMARY KEY(pin)),性能会非常好。 -
我的意思是对于一家运输公司来说,会有 19000 行,比如 pincode_id shipping_company_id 费率。至少会有 4 家航运公司。
-
使用 19K 行。加载更复杂,但查询速度非常快。
标签: mysql database-design