如何使用sql创建欺诈检测?

k5hmc34c  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(278)

我有一个场景:

用户a是(欺诈者)。
用户b不是(欺诈者)。但是,系统将不允许用户b执行任何操作。因为b和a使用相同的电话号码(与欺诈用户共享属性)。(1层)。
用户d不是(欺诈者)。但d与b使用相同的设备ID,b与欺诈用户共享属性。然后也阻止用户d。在这种情况下,有两层。d与b比较,b与a比较。在这个示例中,有3个用户。如果我有100个用户!查询将非常长,将有99层。

  • 注意:我不想更新b和d成为欺诈者。它们只是欺诈用户的共享属性。所以如果我决定把用户a改成不是骗子。其他用户没有更改。
n7taea2i

n7taea2i1#

老实说,这个问题是相当抽象的,所以需要做一些假设如下:,
假设数据库服务器为mysql
考虑到这一点,欺诈账户的数据已经出现在表中。
字段的重复 MobileNo OR DeviceId OR EmailId OR IPAddress 弗雷斯特决定。
为了回答你的问题,
创建 AfterUpdate 触发你的 table .
在那个触发器里 Fetch 以及 Update 具有重复值的行 MobileNoDeviceIdEmailIdIPAddress .
仅当, NEW.IsFraudsterStatus = 1 ,

if (NEW.IsFraudsterStatus = 1) THEN
     UPDATE tableUser
     SET IsFraudsterStatus = 1
     WHERE 
          (tableUser.MobileNo = NEW.MobileNo
          OR
          tableUser.DeviceId = NEW.DeviceId
          OR
          tableUser.EmailId = NEW.EmailId
          OR
          tableUser.IPAddress = NEW.IPAddress)
         AND
          IsFraudsterStatus = 0; 
ELSE
     UPDATE tableUser
     SET IsFraudsterStatus = 0
     WHERE 
          (tableUser.MobileNo = NEW.MobileNo
          OR
          tableUser.DeviceId = NEW.DeviceId
          OR
          tableUser.EmailId = NEW.EmailId
          OR
          tableUser.IPAddress = NEW.IPAddress)
         AND
          IsFraudsterStatus = 1;
END IF;

在上述查询中,您可以添加 conditions 如有需要,请注明 OR 如果其中任何一个条件是真的,那么账户就是欺诈者。
一旦上述查询被触发,它将作为欺诈者重复更新所有此类帐户。请注意 AND 它将防止无休止的递归触发。
除此之外,我推荐一个 BeforeInsert 触发器,它将验证并限制欺诈者帐户的创建。

相关问题