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

时间:2016-02-12 13:32:18

标签: mariadb

我正在创建系统的过程,该系统可以从电子商务平台的给定密码(邮政编码)中识别出货公司(联邦快递,UPS等...)。

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

我的初步计划是创建一个表结构,如下一个;

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

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

pincodes表将有pincodes,将有两列用于拾取,另一列用于传送。

因此,当用户购买产品时,我需要找到一个从卖家位置取货的货运公司,并且还在买家位置发货。

如果我们将来要添加其他运输公司,我可以通过附加ID更新shipping_ids_pickup,shipping_ids_delivery作为密码。

有人可以建议更好的解决方案。当前的方法有什么问题吗?

1 个答案:

答案 0 :(得分:1)

  

目前的做法是否存在任何问题。

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

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)

这些实体具有多对多关系。因此,创建一个表格来链接它们:

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

关系本身基本上成为域中的实体。不一定是主要业务实体(即不是聚合根),而是逻辑实体完全相同。该实体与其相关的聚合根分开维护。

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