视觉上探索数据库

2021-04-05 07:59:04

一种查看数据库的一种方法和#39; S结构是表中的外键关系图。两种类型的视觉表示占主导地位:作为需求协商和设计的一部分创建的模型或实体关系图(ERDS),以及扩展数据库的描述性图。前者是用手动绘制的白板或图中的软件;后者通常由数据库管理工具生成,具有一些手动清理和组织。这两种样式通常将完整的数据库作为它们的对象,以及是否描述或规定,它们在软件开发过程中的角色是参考材料或文档。

文档ISN' t一次性。尽管这些图表已经超出了一旦被保存了,但他们正在努力制造,或者至少制作易读 - 自动化工具只是如此擅长布局,尤其是表和关系的增长。这种努力尚未丢弃,无论如何仍然大多数准确的图仍然是一个有用的参考。

文档ISN' t一次性。但文档ISN' T唯一用于在系统中定向自己的工具:我们还可以探索,从零件和不同角度查看系统,从概念到概念的模型跟随单个路径。探索取决于采用模型内部的部分,移动角度,快速反馈和足够的上下文来导航,但不是不堪重负。根据点本身,单点的视图或多或少重要,但为了促进探索,必须根据需求生成和丢弃。看,移动,看,移动。

它由此FKS ZSH函数生成的'查询Postgres'使用递归公共表表达式对外键的目录来识别和可视化直线连接到目标的所有内容。查询输出通过呈现为PNG的模板传递给GraphViz套件' s点,并使用Wezterm Imgcat显示的PNG。在此过程中的任何点都没有创建或损害任何文件。

虽然为什么只有一条直线?上面的图表具有明显的空白:Film_Actor暗示了一个演员,并在交界处的另一侧拍摄了自己的表。库存可能想要商店,租赁和支付桌子' T无需客户。来自租赁的视图是显着的,有一半的表'在电影中可见半个表:

此图表部分是熟悉的:租赁本身,支付表,库存,电影 - 结束对仍然缺少的演员和类别表的最后一层。那些已经传递了一个隐喻的角落,因为为了从租赁到Film_Actor来到Film_actor,你必须先将外部键进入电影(通过rental.inventory_id和库存.film_id),然后通过film_actor.film_id下来。与此同时,语言,是"向上和#34;薄膜,因此从租金中仍然可见。

原因FKS将其从目标表中的直线限制为直线,是保持上下文缩小。您可以通过从多个透视图导航和查看图表来获得表结构的更全面的照片;什么FKS显示的是一组可以影响目标的表,或者将受到目标变化的影响。如果您删除商店或电影,则租用该商店或该电影的租赁失效(以及除非中间键设置为Cascade,删除失败)。但删除电影_actor与租赁无关,反之亦然。

在没有限制遍历的实际情况下存在实际严重的问题。如果您通过所有关系重复,您会映射整个子图或相关表的集群。和集群快速增长。 Stuart Kauffman在宇宙中的家中的书中有一个很好的说明:寻找自组织和复杂性的法律。

想象一下,10,000个按钮散落在硬木地板上。随机选择两个按钮并用线程将它们连接。现在将这对放下并随机选择更多按钮,选择它们,并用线程将它们连接。当你继续这样做时,起初你几乎肯定会拿起你之前没有拾取的按钮。但是,一段时间后,您更有可能在随机挑选一对按钮,并发现您已经选择了其中一个对。因此,当您在两个新选择的按钮之间绑定一个线程时,您将找到三个按钮绑在一起。简而言之,随着您继续选择随机对按钮与线程连接,在一段时间之后,按钮开始变为互连到更大的群集。

当线程与按钮的比率或与表格的关系,通过0.5,有0.5个,相位过渡。存在足够的群集,下一个线程或关系可能将一个群集连接到另一个群集,然后是下一个群集。超级集团出现,几乎是整个关系图的大小。我们可以通过查询系统目录来查看数据库中的关系:表比在数据库中查看:

使用tbls(选择count(*)为from Information_schema.Tables,其中table_schema不在(' pg_catalog'' secorify_schema')),FKS(选择count(*)为num从pg_constraint,contype =' f')选择fks.num作为f,tbls.num作为t,fks.num :: decimal / tbls.num作为tbrs交叉加入fks;

我在真实工作数据库中的最低比率为0.56,并且它' s一个小的,f = 14和t = 25。其他方式范围为0.61(f = 78,t = 126),均可达到1.96(f = 2171,t = 1107,因为具有多个外键的重分隔表); Pagila本身位于中间1.08(f = 27,t = 25)。我没有足够的数据来返回这一点,但我认为它是合理的,希望关系的数量往往比表的数量更快地增加。没有对遍历的限制,您可以绘制常规ERD:超级全民家是不可避免的。

FKS将绘制一个常规的ERD,如果只传递数据库名称,但就像我之前说过的那样,自动化工具只在布局时才如此擅长(并且在宽度有限的终端,甚至一个Smallish数据库易于产生一个令人无法缩小的缩放模型)。没有办法添加通用渲染提示,GraphViz从数据库内的本地透视图较小,更有限制的图表进行了更好的较多 - 而且人类也是如此。阅读全尺寸数据模型很难!不得不通过与手中的问题的相关性来排序数十或数百个节点;不带映射的节点和关系,无关紧要地忽略了,其他标记有心理问号。通常,给定的问题涉及比人类思维能够履行更多相关的实体。 FKS并不完全解决问题,但是制作数据库空间和导航该空间视觉上的某种方式来满足我们的局限性和我们的工具。