我为一家履约公司工作,我们必须将许多订单从我们的仓库打包并运送给客户。为了提高效率,我们希望将相同的订单分组并以最佳方式打包。相同的意思是指具有相同数量的订单行包含相同的SKU和相同的订单数量。
为了达到这个目的,我考虑对每个订单进行哈希处理。然后我们可以通过哈希分组来快速查看哪些订单是相同的。
我们正在从Access数据库迁移到PostgreSQL数据库,我们有基于.NET的系统用于数据加载和通用订单处理系统,因此我们可以在数据加载期间进行散列或将此任务交给数据库。
首先我的问题是,是否应该使用数据库管理散列,可能使用触发器,还是应该使用视图或其他东西即时创建散列?
其次,最好为每个订单行计算一个哈希,然后将它们组合起来找到一个用于分组的订单级哈希,或者我应该只对订单行表中的所有CRUD操作使用一个触发器 - 计算整个订单的单个哈希并将值存储在订单表中?
TIA
答案 0 :(得分:1)
除非您有限制此要求,否则您可以将哈希放在最舒适的地方。例如,在.net中编码比在SQL中编码要容易得多。如果不直接修改数据库中的订单,而是通过所有应用程序使用的数据访问层,这是一种可行的方法。然后,数据访问层可以管理哈希值。
即使有哈希,你仍然需要检查散列命令是否确实相同。这是因为很难创建一个完美的散列函数 - 一个没有碰撞的函数,其中所有对象都散列到不同的值,对于结构可能变化很大的数据。
这表明您需要一个查询(或代码),在给定一组订单的情况下,确定哪些实际上相等,将它们分组为等价集。例如。映射到相同哈希码的订单 - 它们是否真的相同。如果从这里开始,那么此查询也可用于从整个数据库中查找重复的订单。它可能不会很快,在这种情况下,您可以在插入/更新订单时使用散列来提高性能。