我需要分离一个名为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 |
我提出了以下设计建议:
创建一个名为TYPE_ID
的新列,表示数据类型ID(即1 =以本地货币表示的金额,2 =整数金额,3 =百分比金额)并将其链接到单独的表格包含所有可能的类型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
问题在于数据格式的数量会增加,这意味着每次创建新格式时都会添加新列。
本地货币已有一个自己的标识符表。
用于区分AMOUNT列中各种类型数据的合适且可扩展的设计是什么?
提前谢谢!
Markus
答案 0 :(得分:0)
请实施此
使用本地货币标识符表的CURRENCY_ID列,并为整数(1001)和百分比(1002)添加更多行,无论将来在货币主表中可能不使用更高的代码。
currency master for sample
Currency_ID | Type
1 | dollar
2 | euro
1001 | INT_Amt
1002 | PERC_AMT
- 您的Amount表将以旧方式引用currency_ID列:
醇>
CURRENCY_ID | AMOUNT
1 | 1000000
2 | 43234.33
1001 | 12
1002 | 0.67
1002 | 0.58
1001 | 10
答案 1 :(得分:0)
数据库表的 idea 是在不同的列(字段)中存储和检索不同的(读取不相关的)值,这样处理它们就会更容易,而且你不会得到一个crapload每当你需要操纵它时,IF语句。
总是最好为每种输入类型创建一个新列。在显示时处理显示问题,而不是在SQL中处理。
根据经验,Option 2
是最好的