讨论:关系型数据库关系推断的方法

对于一个关系型数据库,如何根据库中的已有数据推断出包含所有可能的且合理的ERD集合。

分析:推断的结果是一个ERD(V, E),其中点集V已经确定,可以认为是所有的表。

(或所有关心的表,本问题假设是所有的表,基于此情况可以推得其他情况,这是选取一个最小子问题进行研究)

那么问题首要先解决的是推出E。对于关系型数据库,存在三种转系1-1, 1-n, n-n。若数据库满足第三范式,则不存在n-n关系,而是通过bridge table进行连接。

1-1关系

1-1关系是两张表中的唯一键之间的一一对应关系,这种情况相对较好洞察,即(1)

对于未清洗的数据库,则是(2)

1-n关系

一对多关系即在一张表中的某一个键是另一个表中的唯一键(3)

当检测到满足(1),(2)关系的时候,即可以认为该关系是E中的元素。

问题: ERD究竟是什么样的图?其满足一些拓扑结构时是否会具备一定的性质?

这里主要以“树状ERD与图状ERD的区别”为主要讨论点。

从常识经验上来讲,ERD是一张图,但不一定是树。但对于一个具体问题的研究,往往最终的视图数据是一张事实表,如果根据该事实表进行反推,则是基于事实表反推得到一些广义的维度表(不一定是同一性质的维度,可能是一些复合维度表,如将时间、地点作为一个整体的维度表)。基于这种假设,则ERD理应是一棵树而不是图。

通过分析一些图结构的ERD发现,这些数据库中存在多个事实表,所以当针对某一具体问题研究时,由于会选择唯一的事实表,所以这是关心的表关系也只是该事实表对应的树状ERD。

注:这里缺乏严格的推理论证,只是一个经验结论。

由此推论:ERD是由构成其的多个事实表(树)的并集, 即

这里,还有一个隐藏的公设:

通常情况下,两个事实表的join是没有意义的,因为事实表是包含度量(因变量)的表。两个事实表并时意味着二者对应的维度表要先做并,新的并集会产生更细粒度的自变量定义域,但此时无法确定更细粒度的自变量对应的因变量。

有的反驳观点认为,可以通过两个表的度量计算出新的表的度量。这是不可能的,因为度量是采集的事实数据(度量之间都是线性不相关的向量),若可以通过其他度量计算得到,则其本质是指标(位于度量张成的向量空间中的向量),而不是度量。

对于多个生成树集合,能否给出不同树的推荐评分

生成树是假定点集固定,边集不同的。对于ERD的研究,后续也应当研究点集不同的情况。这里假定选取的是最大可能的点集。

若采用最小生成树进行建模,则必须满足假设:边的权值具有可加和性。

注:可加和性要满足

当E1变化时,pE2的值不会随之变化。

一种常见的评分算法可以被应用到这里作为某一个关系(边)的权值,即该关系的熵值。对于一个维度的熵值相对较好定义,但对于一个关系要如何定义其熵呢。

关系的熵需要满足,一对一关系的熵要低(讨论一对一关系的熵是否应当与维度的成员数无关?),一对多关系的熵高,关系的熵与维度的成员分布的熵成正相关,这里给出一个满足该性质的定义:

Author: Lobay Kanna
Link: http://lobay.moe/2019/06/30/discuss/discuss-6-30/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.