Skip to content

SQLGraphExplorer‐6

Xin edited this page Dec 17, 2023 · 3 revisions

问题

逆像集合的定义如下:

$$E(R_1,R_2,...,R_n)是一个关系表达式 \\\ t是在sch(E)上的一个元组 \\\ t的逆像集Inv(t,E)=\{t_1,t_2,...,t_n\}满足下面两式 \\\ \varepsilon(\{t_1\},\{t_2\},...,\{t_n\})=\{t\} \\\ 如果t_i\ne \epsilon,则\varepsilon(\{t_1\},...,\{t_{i-1}\},\{\},\{t_{i+1}\},...,\{t_n\})\ne\{t\}$$

理论

$E$ 是一个关系表达式,$\mathcal{P}$ 是一个一阶 c-k 元组集合。$\widetilde{E}(\mathcal{P})$ 表示 $\mathcal{P}$ 相对于 $E$ 的逆,其定义如下:

$$\widetilde{E}(\mathcal{P})= \begin{cases} \widetilde{E}(\mathcal{P})=\mathcal{P}, & E=R \\\ \widetilde{E}(\mathcal{P})=\widetilde{E'}(\{\ [N,C\wedge\overline{\Gamma_i}]\ |\ [N,C]\in\mathcal{P},\overline{\Gamma_i}\in\overline{\Gamma}\}), & E=\sigma_\Gamma(E') \\\ \widetilde{E'}(Ext(\mathcal{P},sch(E'))), & E=\Pi_X(E') \\\ \widetilde{E'}(Proj(\mathcal{P},sch(E')))\odot\widetilde{E''}(Proj(\mathcal{P},sch(E''))), & E=E'\bowtie E'' \\\ \widetilde{E'}(\mathcal{P})\odot\widetilde{E''}(\mathcal{P}), & E=E'\cap E'' \\\ \widetilde{E'}(\mathcal{P})\diamond \widetilde{E''}(\mathcal{P}), & E=E'\cup E'' \end{cases} \\\ R是关系符号, \\\ E'和E''是一个关系表达式, \\\ \Gamma=\Gamma_1\vee\Gamma_2\vee...\vee\Gamma_k, \\\ \overline{\Gamma}=\{\overline{\Gamma_1},...,\overline{\Gamma_k}\}$$

值得注意的是:

  • 论文的原文对于 $\overline{\Gamma}$ 的定义非常模糊,也没有给出具体求解的公式或算法。所以这块比较麻烦。。。
  • sch(E) 也是如此

例子

--sch(R1)=AB ; sch(R2)=BC
SELECT A,C FORM R1 JOIN R2 WHERE B=b

$E=\Pi_{AC}(\sigma_{B=b}(R1\bowtie R2))$, 假设执行的结果是$\mathcal{P}={[(ac),\top]}$ ,推导过程如下

$$\begin{align} & \widetilde{E}(\mathcal{P}) \\\ & =\widetilde{E'}(Ext(\mathcal{P},sch(E'))) & E'=\sigma_{B=b}(R1\bowtie R2) \\\ & =\widetilde{E'}(Ext([(ac),\top],ABC)) & \mathcal{P}=\{[(ac),\top]\},sch(E')=ABC \\\ & =\widetilde{E'}([(ax_Bc),\top]) \\\ & =\widetilde{E''}[(ax_Bc),\top \wedge x_B=b] & E''=R1\bowtie R2 \\\ & =\widetilde{R1}(Proj(\mathcal{P'},sch(R1)))\odot\widetilde{R2}(Proj(\mathcal{P'},sch(R2))) & \mathcal{P'}=[(ax_Bc),x_B=b] \\\ & =\widetilde{R1}(Proj(\mathcal{P'},AB))\odot\widetilde{R2}(Proj(\mathcal{P'},BC)) & sch(R1)=AB,sch(R2)=BC \\\ & =\widetilde{R1}([(ax_B), x_B=b])\odot\widetilde{R2}([(x_Bc),x_B=b]) \\\ & =[(ax_B,x_Bc),x_B=b] \end{align}$$
-- 假设目标表为R3,sch(R3)=AC,输入tuple(行)为ac
SELECT A FROM R1 WHERE R1.A=a AND R1.B=b
SELECT C FROM R2 WHERE R2.B=b AND R2.C=c

代码

公式推导

  • 按上面的公式写了些代码
  • 但是上面的公式缺少 rename ,无法覆盖 sql 全部情况

整体思路

Sql -> Expression -> 公式推导 -> C-K-Tuple -> Sql

目前进度:

  • Sql -> Expression
  • Expression -> C-K-Tuple
  • C-K-Tuple -> Sql

底层绘图

ant-design

问题:

  • 不会 react,不知道如何从后端获取 json 数据并赋值给变量,导致现在只能复制粘贴到前端源代码中。
  • 我选择的是 Ant Design Chart 中的来源去向图,但是该图不支持二维表格。
  • 并且不知道如何根据节点类型来修改背景颜色/形状,导致所有节点都长得一样。

结果:

json-result

Clone this wiki locally