数据库设计:具有多种数据类型的拆分列
Database design: split column with multiple data types
我需要隔离一个名为 AMOUNT
的旧数据库字段,它允许用户将多种类型的数字数据(例如小数、整数、百分比)存储到同一列中。值的范围可以从 100,000,000.00 到 0.00。
AMOUNT
中存储的值可以表示四种不同的数据格式:
- 以当地货币表示的金额(例如,100,000,000.00 到 00.00 之间的欧元、美元、日元...)
- 整数金额(例如 0 到 12 之间的整数)
- 百分比金额(例如介于 1 和 0.01 之间的值)
示例:
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 |
我提出了以下设计建议:
创建一个名为 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
列中的金额仍然代表不同的格式(大整数和小数),因此不统一。
为每种数据类型(即AMOUNT_LOCAL_CURRENCY
、AMOUNT_PERCENTAGE
、AMOUNT_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
- 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
最好
我需要隔离一个名为 AMOUNT
的旧数据库字段,它允许用户将多种类型的数字数据(例如小数、整数、百分比)存储到同一列中。值的范围可以从 100,000,000.00 到 0.00。
AMOUNT
中存储的值可以表示四种不同的数据格式:
- 以当地货币表示的金额(例如,100,000,000.00 到 00.00 之间的欧元、美元、日元...)
- 整数金额(例如 0 到 12 之间的整数)
- 百分比金额(例如介于 1 和 0.01 之间的值)
示例:
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 |
我提出了以下设计建议:
创建一个名为
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
列中的金额仍然代表不同的格式(大整数和小数),因此不统一。
为每种数据类型(即
AMOUNT_LOCAL_CURRENCY
、AMOUNT_PERCENTAGE
、AMOUNT_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
- 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
最好