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

时间:2020-06-22 04:37:45

标签: mysql sql fraud-prevention

我有一个场景,其中: enter image description here

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

*注意:我不想将B和D更新为欺诈者。它们只是欺诈用户的共享属性。因此,如果我决定将用户A更改为欺诈者。与其他用户没有任何变化。

1 个答案:

答案 0 :(得分:2)

说实话,问题是非常抽象的,因此需要做出如下一些假设,

  1. 假设数据库服务器为MySQL
  2. 考虑到这一点,表中已经存在欺诈者帐户的数据。
  3. 字段MobileNo OR DeviceId OR EmailId OR IPAddress的重复决定了老派。

所以回答您的问题,

  1. 在您的AfterUpdate上创建一个table触发器。
  2. 在该触发器FetchUpdate中,对MobileNo OR DeviceId OR 具有重复值的行EmailId OR IPAddress

仅在NEW.IsFraudsterStatus = 1

时执行Fire Update查询
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,以便在任何条件为真的情况下使帐户成为欺诈者。

  1. 触发以上查询后,它将重复更新所有此类帐户,例如 Fraudster 。并且请注意AND ed条件,它将防止无限递归触发。

此外,我还建议使用BeforeInsert触发器,该触发器将验证并限制欺诈者帐户的创建。