【问题标题】:Database Design: Store Credit Card Information数据库设计:存储信用卡信息
【发布时间】:2012-07-15 16:56:40
【问题描述】:

好的,到目前为止,我有一个存储收据信息的表。

例如:

TABLE receipt
receipt_ID (int)(primary key)
creditcard (int) //Last 4 digits of credit card.
purhcaseAmount (int)
transactionTypeID (int)
remainingBalance (int)

creditCard 列有 4 位数字的限制,因为大多数收据只显示信用卡号的最后 4 位数字。

但是,有些银行会显示前 2 位数字和后 2 位数字,我想将此信息保留到数据库中。

您将如何修改您的数据库设计以适应此业务需求?

【问题讨论】:

  • 对信用卡信息要非常小心。即使是部分也可以考虑在 PCI 合规范围内。
  • 也许不是最好的方法,但您当然可以将其设为 varchar 并在 4 位数字之前放置一个字符标志。因此,对于最后 4 位数字,它将是 l9999,对于第一个和最后两个 b9999 或您想要的任何字符。这只是我的第一个想法。

标签: sql database-design normalization


【解决方案1】:

您可能想要存储有关信用卡的多条信息,例如姓名、卡类型等。对于数字本身,为什么要聪明呢?只需将其设为 varchar(19) 并将其存储为 12****************34 或您选择的任何其他格式。

【讨论】:

  • 我会担心会有一个列让您不小心输入完整的信用卡号。
  • @podiluska 是的,理论上有一张 19 位数的卡片。
  • @JeremyHolovacs 您可以“不小心”在任何足够大的字段中存储完整的信用卡号。字段的形状本身并没有安全风险。
  • @RexM,有一个足够大的字段来保存完整的信用卡号可能意味着下一个开发人员正在查看信用卡号应该进入该列的代码。此外,为什么要存储无关紧要的信息?
【解决方案2】:

我不会使用 int,即使是最后 4 位。根据经验,如果您存储的数字加起来没有意义,请将其存储为字符串。

【讨论】:

    【解决方案3】:

    如果您的业务要求是存储 4 位数字,那么它们在字符串中的位置是否重要?这些信息将用于什么用途?

    如果没关系,只需用正则表达式抓取数字,忽略不是数字的内容,然后将数字填充到表格列中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-26
      • 1970-01-01
      • 2010-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-17
      相关资源
      最近更新 更多