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

时间:2016-04-12 03:43:56

标签: database database-design plsql oracle11g data-modeling

我是数据建模的新手,我无法想出能够存储逻辑的数据模型。

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

当客户访问公司的某个网站时,他们会输入他们的邮政编码,根据他们的位置,这些属性将用于安排在线商品目录。

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

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

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

到目前为止,我有2个表有多对多的关系,我想添加一个额外的表,以便我可以合并逻辑(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并处理分组。

1 个答案:

答案 0 :(得分:0)

这是将两个(多个)表一起加入AND / OR / XOR或其他逻辑的典型场景。

最好的选择是构建一个meterailized视图,将多个表中的属性一起归一化为一个表(此表称为视图)。

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

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

然后,您将在此表/视图上操作逻辑语句(从您的示例中修改):

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

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

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

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