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

Mysql 数据库设计:具有多个数据类型的拆分列,mysql,database-design,entity-attribute-value,Mysql,Database Design,Entity Attribute Value,我需要对一个名为AMOUNT的旧数据库字段进行分段,该字段允许用户将多种类型的数字数据(例如小数、整数、百分比)存储到同一列中。这些值的范围从100000000.00到0.00 AMOUNT中存储的值可以表示四种不同的数据格式: 以当地货币表示的金额(例如,100000000.00至00.00欧元、美元、日元等) 整数金额(例如0到12之间的整数) 百分比金额(例如,介于1和0.01之间的值) 例如: CURRENCY_ID | AMOUNT | TYPE |

我需要对一个名为
AMOUNT
的旧数据库字段进行分段,该字段允许用户将多种类型的数字数据(例如小数、整数、百分比)存储到同一列中。这些值的范围从100000000.00到0.00

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

  • 以当地货币表示的金额(例如,100000000.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=百分比金额),并将其链接到包含所有可能类型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\u LOCAL\u CURRENCY
    AMOUNT\u PERCENTAGE
    AMOUNT\u 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
    
  • 问题是数据格式的数量可能会增加,这意味着每次创建新格式时都会添加一个新列

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

    什么样的设计适合且可扩展,以区分金额列中的各种类型的数据

    提前谢谢你

    马库斯

    请执行此操作

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

    currency master for sample
    
    Currency_ID | Type
    1           | dollar
    2           | euro  
    1001        | INT_Amt
    1002        | PERC_AMT
    
  • 您的金额表将以旧方式引用“货币ID”列:
  • 数据库表的思想是在不同的列(字段)中存储和检索不同的(读取无关的)值,以便更容易地处理它们,并且不会在每次需要操作时都收到大量IF语句

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


    根据经验,
    选项2
    是最好的

    原始表格有什么问题?虽然不太理想,但为什么需要更改它?建议1在逻辑上与原始表格并无不同。建议2是拥有多个表的一半。但由于缺乏更大的图景,所有的解决方案都缺乏依据。谢谢Stoleg。我主要关心的是,在同一列中有如此不同的格式(货币、百分比、其他度量尺度),这一点我觉得很奇怪,因为它们并不是直接度量同一事物。您似乎正在进入EAV模式设计。当心。
    CURRENCY_ID |  AMOUNT
         1      |  1000000 
         2      |  43234.33
       1001     |   12
       1002     |   0.67
       1002     |   0.58
       1001     |   10