需要有关存储密码系统(邮政编码)和运输公司服务详细信息的建议

Need advice on storing pincode system (Zip code) and Shipping company Service Details

我正在创建系统,该系统可以根据电子商务平台的给定密码(邮政编码)识别运输公司(Fedex、UPS 等...)。

运输公司将提供他们提供取件和送货服务的密码列表。因此,当我们收到产品订单时,使用卖家的密码和买家的密码,我需要获得提供这两种服务(即提货和送货)的运输公司列表。

我最初的计划是创建一个 table 结构,如下所示;

shipping_companies
-------------------
1. Fedex
2. UPS
3. DHL

pincodes
----------
id pincode | shipping_ids_pickup | shipping_ids_delivery
1. 263152           1,2                2,3

pincodes table 将有 pincodes 并且有两列,一列用于取货,另一列用于送货。

因此,当用户购买产品时,我需要找到可以从卖家地点取货并在买家地点送货的运​​输公司。

如果我们将来要添加另一家运输公司,我可以通过附加 ID 更新 shipping_ids_pickup、shipping_ids_delivery 以获得密码。

有人可以提出更好的解决方案吗?目前的做法有什么问题吗?

Is there any issue with current approach.

是的。您在单列中存储多个值:

pincodes
----------
id pincode | shipping_ids_pickup | shipping_ids_delivery
1. 263152           1,2                2,3

                     ^------ here ------^

这将使查询和维护数据 变得比需要的更困难。该代码将更多地关注字符串操作,而不是将客户与运输公司相匹配。

业务需求是为客户匹配船公司。业务需求不是操作字符串值。

相反,将单个数据元素存储为...单个数据元素。从您拥有的两个实体开始:

Shipping Companies
--------
ID (int, PK)
Name (string)

Pincodes
--------
ID (int, PK)
Pincode (string)

这些实体具有多对多关系。所以创建一个 table 到 link 他们:

Shipping Company Pincodes
--------
ID (int, PK)
Shipping Company ID (int, FK)
Pincode ID (int, FK)
Pickup (bit)
Delivery (bit)

关系本身本质上成为域中的一个实体。不一定是主要业务实体(即,不是聚合根),但仍然是逻辑实体。该实体与其相关的聚合根分开维护。

查询和更新数据变得容易很多,并且代码可以专注于正在执行的业务逻辑的语义,而不是执行它的各种开销。