【问题标题】:how to create fraud detection with SQL?如何使用 SQL 创建欺诈检测?
【发布时间】:2020-06-22 04:37:45
【问题描述】:

我有一个场景:

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

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

【问题讨论】:

  • 你在说什么?!?您能否通过一些具体示例来澄清您的问题?
  • @paulsm4 我没有这方面的代码。让我稍微改变一下场景。我的数据库中有一个用户表。每个用户有 4 个。(电子邮件、电话、IP、设备 ID 和状态)。用户 A 的状态是欺诈者。这意味着用户 A 不能使用系统。他/她决定开设一个新帐户(用户 B)。但是,我的系统将检查 A 和 B 之间的共享属性它返回 B 和 A 使用相同的电话。意味着 B 成为欺诈者。
  • @paulsm4 你能再读一遍这个问题吗?我已经更新了它。有人建议使用递归 CTE?

标签: mysql sql fraud-prevention


【解决方案1】:

说实话问题很抽象,所以需要做一些假设如下,

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

所以回答你的问题,

  1. 在您的table 上创建AfterUpdate 触发器。
  2. 在该触发器 FetchUpdate 行中,MobileNo OR DeviceId OR EmailId OR IPAddress.

仅在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,请注意ORing 他们,如果任何条件为真,该帐户就是欺诈者。

  1. 一旦上述查询被触发,它将重复更新所有诸如 Fraudster 之类的帐户。请注意ANDed 条件,它将防止无限递归触发。

除此之外,我还推荐一个BeforeInsert 触发器,它将验证和限制创建欺诈者帐户。

【讨论】:

  • 好吧,我明白你的意思了。我在想这个。但这不是我要找的。这种方式将影响帐户 B 和 D。假设我已决定将 A 更改为不是欺诈者。在这种情况下,B 和 D 将是欺诈者,而 A 不是。
  • 所以您猜测 OP 想要在添加新的“用户帐户”记录时检查某些条件。如果是这样,您对使用 BeforeInsert 触发器的建议是很好的建议 :) 不过,坦率地说,我仍然不知道问题是什么 :(
  • @ABDULAZIZNOREDINQADMOR 然后在这种情况下,您可以让ELSE 阻止并触发 Update 查询,以删除用户的欺诈者状态。
  • @paulsm4。对不起,这就是我现在能做的。我将尝试为此提供查询。
  • @AniketBhansali 如果 A 和 B 是欺诈者怎么办。如果我从用户 A 中删除欺诈者身份。那么用户 B 将保持欺诈者身份?
猜你喜欢
  • 2011-04-04
  • 2020-07-18
  • 1970-01-01
  • 2021-04-11
  • 2013-01-14
  • 1970-01-01
  • 2014-06-15
  • 2012-02-12
  • 2010-09-28
相关资源
最近更新 更多