如何优化布尔函数?

时间:2010-07-12 08:40:45

标签: optimization theory set

我正面临着通过自动化机制优化数据库设计的挑战。 数据库将包括将任意数据与属性相关联的表 例如表A包含点击购买按钮的所有人的ID,表B包含所有没有退款的ID,....

所以给出了一些非常基本的MainTables,例如A,B,C,D应由set theory(union,intersect,complement)操作组成,使用某种GUI,产生新的SubsetTables

随着更多子集的创建,它们越来越依赖于彼此,例如E =(A和B),F =(A和B和C) - 都是布尔函数,人的id在这些集合中是不是

现在我尝试优化填充/查询我的表的数据库查询,以便查询不是F =(连接B连接C)但是F =(E连接C),这是有意义的,因为E包含更少的行它已经是一个子集

最后这意味着即时通知我询问哪个(如果有的话)数学/软件算法可以用许多集合和子集(可能是几百个)来优化我的问题,这样我就可以有效地查询和填充表格

我已经考虑过仅使用MainSet的信息创建新的子集并使用Karnaugh-Veitch-Algorithm优化那些GU​​I创建的子集,但是这将导致例如A和B和C.我不知道如何进行优化的第二步(A和B和C)转换为(E和C),并且更复杂,导致找到(sub)的最有效组合的问题集的

thx任何建议

1 个答案:

答案 0 :(得分:0)

可能有一些其他原因导致您无法更改表架构,但是如果您能够更改架构,我建议您改为使用包含所有人ID的单个表,并且具有布尔值(位)每个数据的列,例如:

ID  A  B  C
--- -- -- --
1   1  0  1
2   1  1  0
etc...

这意味着数据库服务器将为您完成所有优化:

-- Select all people in set A
SELECT * FROM MyTable WHERE A = 1

-- Select all people in set E
SELECT * FROM MyTable WHERE A = 1 AND B = 1

-- Select all people in set F
SELECT * FROM MyTable WHERE A = 1 AND B = 1 AND C = 1

(我还建议给你的专栏更好的名字)