递归查询结构化表数据/流程设计

时间:2013-01-21 11:07:41

标签: sql ms-access database-design

在我第一次尝试盗用Ms-Access后 - 与你的help - 被证明是一次巨大的成功,我被送回去做“更多这个”。

如果您愿意,可以跳过一些介绍:

我正在建立一个关于某些项目的数据基础,我想从中创建分析和概述。

数据和发现将在Excel或Powerpoint等程序中表示,因此该过程本身非常开放。根据要求,它可能会非常直观,详细点。

但是,数据可能会定期更改,如果结果很好,我可能会重复此过程 因此,我认为理想的方法是拥有一个数据层,然后对该数据进行固定的查询,然后我将(半)手动将结果编译成任何格式的报告,可能使用外部数据分析工具,如作为R介于两者之间。

麻烦的是,我唯一可以访问的数据库是..好吧.. Access 2010.我无权在这台机器上安装任何东西。
如果您有此建议,我当然可以使用非安装或在线工具。

tl; dr:我想使用Ms Access将关系数据库中的数据查询为表格格式,以便使用尽可能少的Ms-Access VBA和表格进行手工处理。


我已经开始在ms-Access中实现原型,这是一个标准的关系数据库。

我对这种设计提出的一个有趣的问题是,我为参与项目的公司提供了一个表格。与此同时,我有一张“关系”表 - 如持股,所有权或合作 因此,假设A公司正在建设项目A,但它只是B公司的补贴,后者部分由C公司拥有,依此类推。

现在让我们说我想查询项目中涉及的所有公司,但作为所有者我只想展示链的最后“元素”。
想象一下,我想按净资产对清单进行排序,这通常只是链条末端的上市公司,而不是链条上的项目补贴等。

这可能与(Ms-)SQL有关,还是我需要在VBA中执行此操作? 现在我想我可以管理写一个VBA函数并将其转储到临时表中,但是我必须创建表单等。

立即产生这种想法的另一个想法是“通过查询回答问题”公司C在哪个项目中有利益“。你可以看到它的发展方向。

我更希望数据库和查询尽可能灵活(在这种情况下,独立于实际的Access)。 所以这一次,没有模拟程序或用户界面。在上一个项目中从Access获得我想要的东西并且使用非常具体的问题集是很痛苦的......

但总的来说,如果可以,我也愿意使用不同的工具。

非常感谢你!

1 个答案:

答案 0 :(得分:2)

在RDBMS中建模层次结构是一个相当棘手的过程 - 有些(如Oracle)具有查询分层数据的内置功能,但我不认为Access会这样做。

最佳解决方案是使用"nested set" model.这允许您在使用标准SQL时对分层数据建模;它的查询速度也很快。

如果您的数据不是分层的,嵌套集就不那么有用了;在这种情况下,典型的解决方案是引入一个表来映射关系 - 通常包括两个相关实体,并且通常具有“关系类型”字段(例如“父”,“部分所有者”等)。这通常称为定向非循环图或DAG。有几种方法可以在数据库中对这些进行建模; “关闭表”可能是最有效的。这个article显示了如何做到这一点 - 这是一个沉重的阅读,但我认为它回答了你的问题。