为算法建模不同的参数



我们的团队正在开发一个应用程序,该应用程序获取我们所管理的人口的统计数据,并通过算法将一组参数应用于这些统计数据,以生成人口中每个成员的测量值。用户将能够设置每个参数的值,运行算法,查看结果,并使用不同的值重做,等等。

参数是固定的(例如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列,每个参数类型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的解释。

将来谁知道,也许日期参数或字符参数也会添加?

在这种情况下,建模的最佳方法是什么?

例如,有些参数是非常大的整数,有些是小整数,有些是货币型,有些是高精度小数。

更重要的是,在数据模型中,非常大的整数将被连接/比较到非常大的整数列,小整数到小整数,货币到货币,等等。

因此,如果您以某种通用格式保存这些参数,那么您就需要一种通用方法来比较通用参数与总体统计数据中通用(未知)表中的通用(未知)列。

SQL不做泛型。您需要一些可怕的逻辑(在高级语言中)来找出哪个通用参数与哪个table.column进行比较,并将SQL生成为字符串。不匹配的可能性很大,需要大量的测试。

如果其中添加了一个新参数,则需要将其添加到相关表中,并更改代码以适应它。

是的,我希望如果添加了一个新参数,它可以连接/比较数据模型中的特定新列。然后为该列命名;不要让它通用。

如果在家庭收入统计中有一列货币,在财产价值统计中有一列货币,则在参数中放入两列货币,分别命名为household_income,property_value。谁知道呢,这些数字的精度将来可能会改变。

我在企业范围的包中看到过类似您要求的东西,用于用户定义的属性。软件包供应商无法提前知道用户想要记录的额外信息。但是没有通用的方法来查询这个:供应商的方法是将数据输入电子表格,并使其成为用户的问题。

最新更新