【问题标题】:Modelling varied parameters to an algorithm为算法建模不同的参数
【发布时间】: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


【解决方案1】:

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

更重要的是,非常大的整数将与数据模型中的非常大的整数列、小整数与小整数、货币与货币等进行连接/比较。

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

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

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

是的,我希望如果添加一个新参数,它可以加入/比较数据模型中的特定新列。然后为该列命名;不要泛泛而谈。

如果您在家庭收入统计数据中有一个货币列,另一个用于财产价值,请在参数中放置两个货币列,分别命名为household_incomeproperty_value。谁知道呢,它们的数值精度将来可能会改变。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多