【发布时间】:2021-11-17 19:58:03
【问题描述】:
我们的团队正在开发一个应用程序,该应用程序获取我们监管的人口统计数据,并通过算法将一组参数应用于这些统计数据,从而为每个人口成员生成测量值。用户将能够设置每个参数的值、运行算法、查看结果以及使用不同的值重做等等。
参数是固定的(比如 12 个参数),但具有不同的数值类型和/或精度。
例如,有些参数是非常大的整数,有些是小整数,有些是货币,有些是高精度小数。
数据模型的第一个部分有几个表中明确定义的参数,每个表都有适合该参数的数据类型和精度,例如(简化):
STABLE_PARAMETERS
id number(4)
very_large_parameter_1 number(18)
very_large_parameter_2 number(15)
range_parameter_min number(3)
range_parameter_max number(9)
VOLATILE_PARAMETERS
id number(4)
monetary_min number(5,2)
monetary_max number(11,2)
conversion_rate number(7,6)
count_rate number(5,4)
该算法正在应用程序的代码中定义,经过测试,预计至少会稳定几年。如果算法发生变化,将是代码更改,重新测试和发布。如果添加了新参数作为其中的一部分,则需要将其添加到相关表中并更改代码以适应它。
我最初认为参数的更通用方法会更好,将参数定义为通用表中的行而不是显式定义为单个列,例如:
PARAMETERS
id number(4)
parameter_name varchar2(100)
parameter_type varchar2(20) -- eg INTEGER, MONEY, FLOAT?
parameter_value ???
parameter_value 可能是:
(1)数字的字符串表示
parameter_value varchar2(20) -- "0.000032" or "1000000000" or "1500.00"
或
(2) 无所不包的数定义
parameter_value number(24,6) -- 0.000032 or 1000000000.000000 or 1500.000000
或
(3) 3 列,每个 parameter_type 1 列,每个参数行仅填充其中 1 列,其他 2 列为空。
parameter_value_int number(18) -- 1000000000
parameter_value_money number(11,2) -- 1500.00
parameter_value_float number(7,6) -- 0.000032
这些似乎都不是正确的方法。 (1) 将数字存储为有风险的字符串,需要根据 parameter_type 解释值。 (2)对于许多数字来说都是多余的。 (3) 稍微好一点,但需要根据 parameter_type 来解释。
以后谁知道,可能还会添加日期参数或字符参数?
在这种情况下,最好的建模方法是什么?
【问题讨论】:
-
除非您定义它,否则工程中没有“更好”/“最佳”之类的东西。同样不幸的是,所有合理的实际定义都需要大量的经验,以及与对细节的混乱敏感度相互作用的大量因素。进行简单的设计。当你证明一个设计和你能想到的所有备选方案都存在问题时(无论当时意味着什么),然后问一个非常具体的问题。这也应该定义“更好”/“最好”。 Strategy for “Which is better” questions
标签: relational-database data-modeling