【问题标题】:Database design for barcode ranges条形码范围的数据库设计
【发布时间】:2016-07-16 12:00:17
【问题描述】:

我正在为我们的仓库开发运输系统。基本上我想要完成的是,从条形码范围中获取一个数字,并将其分配给一个运输订单。

范围由我们的合作快递员定期给出,并且通常不是连续的,例如9000000-90099999020000-9029999。范围内的每个数字只能使用一次。

目前脚本中的范围是硬编码的,当前索引存储在文件中。 (旧版实现)

但我觉得有一个界面是合适的,即使是非程序员也可以管理范围,监视每个范围的状态(例如,当前哪个“活动”,当前索引是什么等)。并且当当前范围用完时,它应该自动切换到下一个可用范围。下面是我想出的UI设计。

您认为将范围数据存储在数据库中是个好主意吗?如果是,我应该如何设计数据库表?

需要考虑的其他一些事情是:

  • 有些范围是由快递员回收的,所以我们有机会 两次收到相同的范围。 (好吧,也许几年后)
  • 大多数情况下,一个范围可以持续 4 个月到 6 个月,所以有 不会有很多范围。 (如果我们使用表来存储范围,我们每年会查看 2 到 4 条新范围记录)
  • 一个范围用完了就基本没用了?

【问题讨论】:

  • 我的猜测是您需要一个单独的表来表示实际范围,然后需要一个链接表来表示运输订单和条形码表之间的关系,即( barcode_id, shipping_id )
  • @Cyclone 是的。你认为有一个专门的范围表是个好主意吗?你会如何设计桌子?
  • 为了不重复数据那么你需要使用一个单独的表

标签: php mysql database web database-design


【解决方案1】:

我认为你需要对事情采取更高层次的看法。

关键是 GS1 系统,以前称为 EAN(我已经使用了 20 多年。)

重要的问题是您不应该让外部机构指定您的货件编号。如果您决定将发货详细信息保留 7 年,并且他们决定在 3 年后回收号码,那么您有数据问题。同样,如果您有多个船务代理(或在未来接管另一个,现有代理被拆分成部分或出售或其他),那么当 THEIR 系统时,您可能会再次遇到数据问题变化。

(这适用于所有不由您的组织直接控制的数据)

EAN 方式是使用 SSCC - 串行运输集装箱代码。这是分配给对象的 18 位代码,用于唯一标识该对象。它的标称寿命为三年,因此不应更频繁地重新发行。

SSCC 是根据国际公认的结构生产的,并以“code 128”条形码(因此通常称为 GS1-128 或 EAN-128)编码,其前导字符为 [fnc1] - 国际接受表示“这是遵循 EAN-128 格式的条形码”。剩下的字符是:

00 - SSCC 的人工智能(有各种用途的代码。“00”表示“SSCC”。它实际上是一个应用程序标识符 - 尽管甚至是条形码打印机众所周知,制造商相信它是“20 位代码”的一部分。

1 digit - 以前,“3”是“内部托盘”,“4”是“外部托盘”。由于一个经常变成另一个,这个系统很快就被抛弃了,但传说仍然存在——有些人会错误地坚持前导数字必须是“3”。

7-9 digits - 国家代码 + 组织代码。由控制组织分配并授权给使用成员组织。

9-7 digits - 由使用会员组织签发的个别货件编号。

1 digit - 根据公布的算法产生的校验位,通常由打印机固件计算。

因此,第一组和倒数第二组数字由 GS1 成员组织(即您的组织)自行决定分配。

此系统可用于将您的货物运送到您的组织之外,也可用于跟踪您的组织内的货物

您的托运人很可能已经为您分配了他们号码的一个子集,就像他们通常对非 GS1 成员的小型组织所做的那样。不幸的是,执行此任务的职员更愿意以同样的方式对待所有客户,因此传说您必须使用他们的系统。如果这个想法已经在他们的 IT 猴子的肥沃头脑中扎根,他们可能已经根据这个假设建立了他们的系统。

如果他们的 IT 系统是由专业人员设置的,那么他们将能够接受任何符合 SSCC 的要求 - 您只需发送您的发货清单您的号码和他们的软件将在提货时根据您的打印机生成的标签验证它。

您确实需要与他们的 IT 部门讨论他们的要求。

这意味着您根本不需要使用他们的号码 - 您可以按照设计使用系统,使用您的号码,你有控制权。

【讨论】:

  • 感谢您提供有关 GS1 的详细信息。我们确实有另一个符合 SSCC 的条形码(带有国家代码、组织代码、我们自己的身份代码等)。但是对于我提到的条形码,我们的合作伙伴快递一直在向我们提供范围,这应该是您提到的他们编号的子集。两种条码规则均由我们的合作快递公司提供,一种是他们自己的,另一种是目的国快递公司的。我们是处理国际运输的,所以我们在一个包裹上有两个条形码,一个给国内快递(我们的合作伙伴),一个给目的地国家的快递。
  • 一个是必需的——一个为你自己的目的而发行。您应该能够将该号码传达给您的快递员,并且他们应该能够单独使用该号码 - 只要他们按照设计使用系统。
  • 我不确定我是否完全理解你所说的。但是您听起来确实像个内部人士...解决方案是由我们的合作伙伴快递员提供的。使用该解决方案,我们负责生成具有不同规则的两个条形码。一个有一个范围。
  • 很遗憾,我看不到包裹。我不确定您的快递员是否为您提供了一个应用程序,该应用程序同时生成了两者,其中一个需要定期更改,或者一个是您自己的,用于您自己的目的,另一个来自快递员。一个典型的 SSCC 会有一个人类可读的行,如“(00) 3 4567890 1234567890”(如果使用间距等,可能会有所不同)你有两个吗?如果是这样,那么您的快递员似乎没有遵循系统。在不知道格式是什么的情况下,我无法分辨。 OTOH,第二个代码开头(4xx)可能是交货地点代码。
【解决方案2】:

如果不相邻的范围属于同一个实体,则一个表将具有实体,包括entity_id。另一个表将包含条形码范围(开始和结束),加上entity_id

您需要代码来验证您没有创建重叠范围。并处理删除子范围。

如果您希望拥有数百万个范围,那么我建议您改编my IP-address blocks 代码。

【讨论】:

    猜你喜欢
    • 2014-05-20
    • 2019-08-01
    • 2016-09-20
    • 1970-01-01
    • 2010-11-25
    • 1970-01-01
    • 2011-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多