我正在创建系统的过程,该系统可以从电子商务平台的给定密码(邮政编码)中识别出货公司(联邦快递,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作为密码。
有人可以建议更好的解决方案。当前的方法有什么问题吗?
答案 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)
关系本身基本上成为域中的实体。不一定是主要业务实体(即不是聚合根),而是逻辑实体完全相同。该实体与其相关的聚合根分开维护。
查询和更新数据变得更容易 ,代码可以专注于正在执行的业务逻辑的语义,而不是执行它的各种开销。