【问题标题】:Storing conditional logic for compliance in a database在数据库中存储合规性条件逻辑
【发布时间】:2014-06-06 14:33:42
【问题描述】:

我正在创建广告系统,该系统应显示在 ATM 上。现在,我必须建立一个数据库结构,用于存储广告、ATM 和客户合规性。

广告系统必须根据 ATM 和 客户。

关键是没有严格定义客户。可以使用其任何属性(卡号、帐户、客户 ID、客户年龄……)对其进行过滤。 例如:

  1. 开 ATM=1 ADV=2 应在客户使用类似“1111%”开的卡时显示
  2. 除 ATM=1 ADV=3 之外的所有 ATM 都应在 ClientID 位于 (1,2) 时显示


如何将这些数据存储在关系数据库中?

我有一个解决方案,但我不喜欢它,我将创建一个 SQL 表,其中将保存原因。 例如:

广告表
Adv_ID
Terminal_ID
状态(值可以是:允许/拒绝)
规则(这里会写SQL过滤器,用于 例如:“像 '1111%' 和 client_id !=10230 的卡片”)
screen_id (on 此广告必须显示在哪个页面)顺序(广告优先级)

您还有其他建议吗?

【问题讨论】:

  • 你有多少这些列,你的条件是否只能由AND运算符连接,是否有超过INLIKE(并且都与NOT结合) ,谁来维护这个配置?
  • 条件将仅与 AND 运算符连接。并且将使用IN,LIKE,NOT IN,NOT LIKE,=,!=。此配置将由 UI 的 ATM 软件专家维护。但目前,我只编写用于配置的 Web 服务。

标签: database oracle database-design data-structures ads


【解决方案1】:

您可以尝试这样设计您的配置:

    • 列名
    • data_type (NUMBER, VARCHAR)
  • 广告
    • 广告
    • seq(分配优先级)
  • 条件
    • adv (FK)
    • column_name (FK)
    • 修饰符:NOT(检查约束)
    • 运营商:LIKEIN(包括=!=,但您也可以明确添加)
    • 值(子表)

这将允许生成所有条件,同时避免拼写错误和 SQL 注入。我添加了data_type 以检查何时只允许使用数字以及何时需要添加/转义引号。

adv column_name  modifier  operator  values (shown denormalized)
2   atm                    IN        1
2   customer               LIKE      1111%
3   atm          NOT       IN        1
3   clientID               IN        1,2

【讨论】:

    猜你喜欢
    • 2010-10-07
    • 2015-12-15
    • 2010-10-02
    • 1970-01-01
    • 2010-12-26
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    • 2011-04-02
    相关资源
    最近更新 更多