在数据库中存储合规性的条件逻辑

时间:2014-04-22 09:40:30

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

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

  

广告系统必须根据ATM和广告选择广告   顾客。

重点是客户没有严格定义。它可以使用其任何属性(卡号,帐户,客户端ID,客户端年龄等)进行过滤。 例如:

  1. 在ATM = 1 ADV = 2时,如果客户是卡,则应显示' 1111%'上
  2. 当(1,2)
  3. 中的ClientID时,应显示除ATM = 1 ADV = 3以外的所有ATM


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

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

      

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

    你还有其他建议吗?

1 个答案:

答案 0 :(得分:1)

您可以尝试设计如下配置:

    • 列名
    • data_type(NUMBERVARCHAR
  • 广告
    • 进阶
    • seq(分配优先级)
  • 条件
    • adv(FK)
    • column_name(FK)
    • 修饰符:NOT(check-constraint)
    • 运营商:LIKEIN(将覆盖=!=,但您也可以明确地添加它们)
    • values(child-table)

这将允许生成所有条件,同时避免拼写错误和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