基于多个标准匹配记录(来自大型数据集)

时间:2011-05-11 16:44:43

标签: mysql

我的数据库中有一个银行帐户列表。我们想尝试根据家庭对这些帐户进行分组。我们符合三个标准:

  • SSN
  • 客户编号(这是银行的任意编号)
  • “地址字符串”(基本上是街道地址加拉链)

如果任何这三件事中的一件在两个帐户之间匹配,那么这两个帐户应该放在同一个组中。

据我所知,

This can't be done with SQL joins。我也不知道如何以编程方式做到这一点。我们的数据库中有数百万个帐户,每个月的数量增加了数千(150K-ish),因此通过每一条记录并说“好吧,做SELECT * WHERE ssn = (this account's SSN)并不是很实际的。 “因为这需要永远。

我知道这是一个模糊而开放的问题,但有关如何进行的任何建议?如果您使用任何语言,我不在乎您在答案中使用的语言。

2 个答案:

答案 0 :(得分:0)

在我诚实的观点中,最好的办法是实现家庭对帐户的一对多或多对多关系。

我可以想到做这样的事情的两种方式。 第一个(也可能不是最好的解决方案)是在帐户表中添加一列来存储家庭。就个人而言,如果可能的话,我会远离这个。

第二,创建一个“家庭”表来存储家庭PK,以及一个家庭交叉参考表来存储家庭FK和帐户FK。

然后我会使用你使用的任何编程语言创建一个进程(希望它的面向对象,你可以创建一个“对象”,你可以用于下一部分,然后在将来。

一旦设置了数据库,我将构建一个接受帐户的“方法”,并通过ssn,客户编号和地址进行比较,并返回类似帐户ID的列表(这可能非常有用,可能使您的初始流程更快)和/或返回类似帐户可能属于的家庭列表

这个是让我担心的部分......在某些情况下,通过地址链接的帐户可能属于或可能不属于同一家庭,因为帐号关联的帐户可能会或可能不会in)即。父母分居的“孩子”(一个客户号码)有一个由每个父母设置的帐户(两个帐户,可能是不同的地址),以及他们自己的帐户......等等...我个人会来通过某种商业逻辑将返回的家庭限制在一个家庭......

此时,通过拥有类似帐户的列表,并返回至少其中一个类似帐户的单个家庭,您可以使用该家庭ID更新这些特定帐户

我会在那时设置逻辑来循环遍历表中的每个帐户并在整个过程中运行...是的,这将是昂贵的....但你应该只需要做一次。

之后,在输入帐户时,设置一个进程以自动查找帐户并将帐户放入住户。

根据您的前端,这可能是也可能不是一个简单的过程。

无论如何我还会开发一个流程/用户界面,允许用户(令客户服务代表服务)在家庭之间删除/移动帐户。

这是一个开始,只是向你发出想法。

答案 1 :(得分:0)

好吧,我没有看到任何方法让每条记录检查所有其他记录,看它是否在同一个家庭。我看到的唯一效率是,如果记录已经在家中,您可以跳过检查。在伪代码

delete all record.household
currentHousehold=1

foreach record
    record.household=currentHousehold
    foreach record
        if record.household is null
            if meet criteria 1
                record.household=currentHousehold
                exit
            else if meet criteria 2
                record.household=currentHousehold
                exit
            else if meet criteria 3
                record.household=currentHousehold
                exit
            end if
        end if
    next record

    currentHousehold++
next record

假设您将一个家庭栏添加到表中,您可以将其分组。我指出应该清除当前的家庭价值 - 这是在某些数据发生变化的情况下。

如果您可以拦截对标准字段的任何可能的更改,那么您可以随时找到记录的新家庭。在这种情况下,家庭价值可以保持不变,脚本只需要找到新记录的家庭(或者如果可以的话,只在添加记录时这样做)。如果您有这种控制权,那么您应该能够将每个记录放入一个家庭中,用于现有记录,添加时或修改标准字段时。