数据库设计:具有多种数据类型的拆分列

Database design: split column with multiple data types

我需要隔离一个名为 AMOUNT 的旧数据库字段,它允许用户将多种类型的数字数据(例如小数、整数、百分比)存储到同一列中。值的范围可以从 100,000,000.00 到 0.00。

AMOUNT中存储的值可以表示四种不同的数据格式:

示例:

CURRENCY_ID |   AMOUNT  |   TYPE      |
     1      |  1000000  |  Currency   |
     2      |  43234.33 |  Currency   | 
   NULL     |    12     |  Integer    |
   NULL     |   0.67    |  Percentage |
   NULL     |   0.58    |  Percentage |
   NULL     |    10     |  Integer    |

我提出了以下设计建议:

  1. 创建一个名为 TYPE_ID 的新列,它指示数据类型 ID(即 1 = 以当地货币表示的金额,2 = 整数金额,3 = 百分比金额)和 link 它到一个单独的 table 包含所有可能的类型 ID。

    CURRENCY_ID |  TYPE_ID |  AMOUNT
         1      |     1    |  1000000 
         2      |     1    |  43234.33
       NULL     |     2    |    12
       NULL     |     3    |    0.67
       NULL     |     3    |    0.58
       NULL     |     2    |    10
    

然而,我看到的问题是,AMOUNT 列中的金额仍然代表不同的格式(大整数和小数),因此不统一。

  1. 为每种数据类型(即AMOUNT_LOCAL_CURRENCYAMOUNT_PERCENTAGEAMOUNT_INTEGER)创建一个新列,并将AMOUNT的值存储到相应的列中.

    CURRENCY_ID |  AMOUNT_LOCAL_CURRENCY | AMOUNT_INTEGER | AMOUNT_PERCENTAGE
         1      |       1000000          |     NULL       |      NULL
         2      |       43234.33         |     NULL       |      NULL
       NULL     |         NULL           |      12        |      NULL
       NULL     |         NULL           |     NULL       |      0.67
       NULL     |         NULL           |     NULL       |      0.58
       NULL     |         NULL           |      10        |      NULL
    

这样做的问题是数据格式的数量可能会增加,这意味着每次创建新格式时都会添加一个新列。

当地货币已经有了自己的标识符 table。

什么是 suitable 和可扩展的设计来区分 AMOUNT 列中的各种数据类型?

提前致谢!

马库斯

请实现这个

使用本地货币标识符的 CURRENCY_ID 列 table 并为整数 (1001) 和百分比 (1002) 添加更多行,货币主数据中不得使用更高的代码 table 以后。

currency master for sample

Currency_ID | Type
1           | dollar
2           | euro  
1001        | INT_Amt
1002        | PERC_AMT
  1. your Amount table will reference currency_ID column in old way :
CURRENCY_ID |  AMOUNT
     1      |  1000000 
     2      |  43234.33
   1001     |   12
   1002     |   0.67
   1002     |   0.58
   1001     |   10

数据库的想法 table 是在不同的列(字段)中存储和检索不同的(读取无关的)值,这样处理它们会更容易和每次需要操作它时,您都不会得到一大堆 IF 语句。

几乎总是最好为每种类型的输入创建一个新列。在显示时处理显示问题,而不是 SQL.

根据经验,Option 2 最好