设计包含逻辑运算符的数据模型



我是数据建模的新手,在开发可以存储逻辑的数据模型时遇到了困难。

数据模型将用于存储位置和营销属性。

当客户访问该公司的一个网站时,他们会输入自己的邮政编码,并根据自己的位置使用这些属性来排列在线商品目录。

项目目录将与数据库分离,因此数据模型将只生成用于排列项目的属性的输出。目录中的每个项目都具有项目编号、价格、条件、制造和营销细分(年龄:成人、教育程度:大学、收入:高等)等属性。

 **For example:** 
 **Input zip code**: 90210
 **Output Attributes**: (ItemNumber:123456, Segment:HighIncome, Condition:New)

这个例子是说,对于zip 90210,首先显示项目#123456,然后是HighIncome段的所有项目,然后显示所有未翻新的项目。

到目前为止,我有两个具有多对多关系的表,我想添加一个额外的表,这样我就可以合并逻辑(and和OR)。

第一个表将包含用户所在公司网站的位置和其他信息

Table Location(
Location_Unique_Identifier number
ZipCode varchar2
State varchar2
Site varchar2
.. 
)

第二个表将具有属性类型(制造、价格、条件等)和属性值(IBM、10.00、翻新等)

 Table  Attributes(
 Attribute_Unique_Identifier number
 Attribute_Type varchar2
 Attribute_Value varchar2
 ..
 ..
 )

在这两个表之间,为了打破多对多的关系,我会添加逻辑表。这个表应该允许我输出

item#123456  AND  (item#768900 OR Condition:New)

我对逻辑表的问题是试图使其足够灵活,以处理未知数量的AND/OR并处理分组。

这是将两个(多个)表连接在一起进行AND/OR/XOR或其他逻辑操作的典型场景。

最好的选择是构建一个计量化视图,将多个表中的属性反规范化为一个表(此表称为视图)。

在您的情况下,视图可能是:

table location_join_attributes{  
    number, 
    zipcode,  
    state,  
    site, 
    Manufacture, 
    Price, 
    Condition,  
    ......
}

然后,您将在此表/视图上操作您的逻辑语句,如下所示(根据您的示例修改):

item#123456  OR  (item#768900 AND Condition:New) AND (more condition)

如果我们没有这个视图,这个操作将首先取出所有具有项目#768900的记录,然后在第二个表中进行筛选,以知道其中哪些表具有条件:new。这将需要很长时间才能完成。如果情况很复杂,表现就很糟糕。

为了快速查询,您应该在操作的列上构建二级索引。

在可伸缩性方面,如果您的业务逻辑发生变化,您可能会构建一个新的视图,而旧的视图将被丢弃。原始表不会更改,这也是物化视图的优点之一。

最新更新