条形码范围的数据库设计

时间:2016-03-29 04:49:38

标签: php mysql database web database-design

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

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

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

但是我觉得有一个接口,即使是非程序员也可以管理范围,监控每个范围的状态(例如哪一个当前处于“活动状态”,当前索引是什么等)。当当前范围用完时,它应自动切换到下一个可用范围。下面是我提出的UI设计。 barcode ranges management interface

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

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

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

2 个答案:

答案 0 :(得分:2)

我认为你需要对问题采取更高层次的观点。

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

重要的问题是,您不应允许您的货件编号由外部机构指定。如果您决定保留7年的装运详细信息,并且他们决定在3之后回收数字,那么您就遇到了数据问题。同样,如果您有多个运输代理商(或将来再接收另一个运输代理商,现有代理商分成部分或出售或其他),那么当他们的系统时,您可能再次遇到数据问题变化。

(适用于所有数据,不受组织直接控制)

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

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

00 - 用于SSCC的AI(有各种用途的代码。“00”表示“SSCC”。它实际上是应用程序标识符 - 尽管条码众所周知,打印机制造商认为它构成了“20位数代码”的一部分。

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

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

9-7 digits - 使用会员组织发出的个人货件号。

1 digit - 检查根据公布的算法生成的数字,通常由打印机固件计算。

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

此系统可用于在您的组织外部发送您的商品,也可用于跟踪您组织中的商品

您的托运人很可能已经为您分配了他们的号码的子集,因为他们通常会与非GS1成员的小型组织进行分配。不幸的是,执行此任务的职员更喜欢以同样的方式对待所有客户,因此您可以 使用他们的系统。如果这个想法已经扎根于他们的 IT猴子的肥沃思想中,他们可能会根据这个假设设置他们的系统。

如果他们的 IT系统已经由专业人员设置,那么他们将能够接受任何符合SSCC - 您只需发送您的发货列表您的号码及其软件将根据您的打印机生成的标签对其进行验证。

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

这意味着您根本不需要使用他们的号码 - 您可以使用系统设计,使用您的数字< strong>你有控制力。

答案 1 :(得分:1)

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

您需要使用代码来验证您是否创建了重叠范围。并处理删除子范围。

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