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

Database 设计包含逻辑运算符的数据模型,database,database-design,plsql,oracle11g,data-modeling,Database,Database Design,Plsql,Oracle11g,Data Modeling,我是数据建模新手,我很难想出一个可以存储逻辑的数据模型 数据模型将用于存储位置和营销属性 当客户访问公司的某个网站时,他们会输入其邮政编码,并根据其位置使用这些属性来安排在线商品目录 项目目录将与数据库分开,因此数据模型将只生成用于排列项目的属性的输出。目录中的每个项目都有属性,例如项目编号、价格、条件、制造和营销细分(年龄:成人、教育程度:大学、收入:高等) 这个例子是说,对于zip 90210,首先显示项目#123456,然后显示具有高收入部分的所有项目,然后显示所有未翻新的项目 到目前为止

我是数据建模新手,我很难想出一个可以存储逻辑的数据模型

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

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

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

这个例子是说,对于zip 90210,首先显示项目#123456,然后显示具有高收入部分的所有项目,然后显示所有未翻新的项目

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

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

Table Location(
Location_Unique_Identifier number
ZipCode varchar2
State varchar2
Site varchar2
.. 
)
第二个表将包含属性类型(制造、价格、条件等)和属性值(IBM、10.00、翻新等)

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

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

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

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

最好的选择是构建一个Meteralized视图,将多个表中的属性一起反规范化为一个表(该表称为视图)

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

table location_join_attributes{  
    number, 
    zipcode,  
    state,  
    site, 
    Manufacture, 
    Price, 
    Condition,  
    ......
}
然后,您将在此表/视图上操作逻辑语句(根据您的示例修改):

如果我们没有此视图,此操作将首先取出所有记录have item#768900,然后在第二个表中进行筛选,以了解其中哪个记录have condition:new。要花很长时间才能完成。如果情况复杂,则性能很差

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


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

表格用来表示事实,而不是逻辑。逻辑进入查询和存储过程。另外,不要在数据库中重新创建数据库(参考属性表)。EAV(实体属性值)表通常是糟糕的设计。
item#123456  AND  (item#768900 OR Condition:New)
table location_join_attributes{  
    number, 
    zipcode,  
    state,  
    site, 
    Manufacture, 
    Price, 
    Condition,  
    ......
}
item#123456  OR  (item#768900 AND Condition:New) AND (more condition)