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

mar*_*ami 5 database oracle database-design ads data-structures

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

广告系统必须根据ATM和客户选择广告.

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

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


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

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

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

你有什么其他的建议?

Pet*_*ang 1

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

    • 列名
    • 数据类型 (NUMBERVARCHAR
  • 广告
    • 副词
    • seq(分配优先级)
  • 状况
    • 副词 (FK)
    • 列名 (FK)
    • 修饰符:(NOT检查约束)
    • 运算符:LIKE, IN(将覆盖=and!=但您也可以显式添加它们)
    • 值(子表)

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