0

我有很多对表,我想有效地确定哪些对具有通过 PK-FK 关系相互关联的表。

  1. 如果记录了 PK-FK 关系,我会利用它,但我不能假设它总是记录在案。(例如,如果源是平面文件等)
  2. 在没有记录的情况下,我需要一种方法来有效地确定这两个表是否相关。
  3. 如果对中的表与非复合键无关,我将需要使用复合键。

我正在寻找的是以下内容之一:

  1. 任何现有算法。
  2. 任何研究论文。
  3. 任何想法/指针。
  4. 任何类似的作品都可以在网上找到。
  5. 书籍建议等

例如:

假设我有以下几对表格:

{Table1, Table2}
{Table3, Table4}
{Table5, Table6}

还有很多...

{Table3, Table4}在上述对中,如果表 Table3 和 Table4 通过 PK-FK 关系相互关联,我想返回该对。要返回正确的对,我需要一种有效的方法来确定表是否相关(假设关系没有记录)。

注意:我正在为表之间的 PK-FK 关系寻找基于数据的发现,而不仅仅是基于元数据的发现(因为在某些情况下元数据可能不可用)。

提前谢谢了。

4

1 回答 1

0

免责声明:我是这样一种算法 Linkifier 的作者。链接器根据元数据(如列名及其数据类型的相似性)和列统计信息(如平均列宽(以字节为单位))估计 FK 约束。

在说更多之前,重要的是要注意 FK 约束识别通常是一个棘手的问题 - DB 不推断 FK 约束但用户必须提供它们是有原因的。因此,不要期望估计值永远是 100% 准确的。

如果要在数据库中设置约束,一般推荐的工作流程:

  1. 确保列具有合理的数据类型和名称。DBLint可能会有所帮助。
  2. 如果数据库很小,则告诉数据库计算数据库中所有列的统计信息。这将提高 PK 和 FK 约束估计的准确性。但是,对大型复杂数据库的统计计算可能需要相当长的时间。另一方面,统计数据不一定要准确(根据所有数据计算)——估计(基于数据的子样本)就足够了。请查阅数据库供应商的文档。
  3. 如果数据库中没有设置 PK,让 Linkifier 估计 PK。查看估计后,对数据库执行生成的 SQL 更改查询。真正 PK 的知识将提高 FK 约束估计的准确性,因为 FK 约束的一侧将被认为是正确的。警告:设置和执行 PK 可能非常耗时(尤其是在大型事务表上)。
  4. 如果您已将 PK 添加到数据库中,请重新运行 Linkifier 以获取 FK 约束的实际估计值。
  5. 在仔细恢复 FK 约束估计后,对数据库执行生成的更改查询。警告:不鼓励盲目地将估计的 FK 约束应用于数据库,因为误报实际上可能被数据库接受为有效。此外,设置和执行 FK 约束可能非常耗时。

如果您只想生成 ER 图,请从 Linkifier 导出估计值并使用 yEd(ER 图的合适布局算法是 BPMN)或 Oracle Data Modeler 将它们可视化。

于 2017-06-22T18:20:02.807 回答