所以我在 Access SQL 中做一个项目,它进展顺利。我学到了很多关于 Access 和 VBA 的知识,这个网站在这个过程中很有帮助。
现在我面临一个性能问题,由于我在这种 SQL 工作方面的经验很少,所以我来这里思考一下。
我有一个大约 100 个部分的约 20 个表关系数据库,这些部分代表路线的一部分。Access 数据库本质上是一张地图,我在上面绘制了几条可以动态着色的路线(通过线) - 颜色由特定问题确定并从数据库中计算出来。
这是一张更好地解释它的图片。您不能单击访问中的线条,因此按钮的颜色和宽度设置为与线条相同,并且可以单击以获取更多信息。
用户可以选择一个日期,它将根据提出的问题显示路线的进度。到目前为止,这些问题始终是二元的“是或否”(绿色或红色)。
我发现由于查询的复杂性,我几乎必须在启动时为每个查询准备一个临时数据库,否则无法顺利滚动日期。
所以无论如何这是我的具体问题:
路线的每个部分都可以在特定日期处于不同的阶段(想想施工)。从“阶段 0”到“完成”
将实施代表项目阶段的新行。所有部分大约有 8 个可能的阶段,这些阶段可能发生在不同的时间,而且 - 事情就是这样 - 每个部分的顺序不同,并不是所有阶段都发生在所有部分上。
我在数据库中拥有的只是每个阶段的开始日期,而不是结束日期。阶段的顺序几乎由开始日期的顺序决定。至少每个阶段每个部分只能发生一次,所以就是这样。正如你所看到的,对于这种以性能为中心的程序来说,这是一件糟糕的事情。
我确信它将涉及一个或多个临时数据库。我的想法:
将所有日期聚合到新表的一行中。由于设置了阶段数,因此每个阶段都有列 - 如果需要,何时开始以及何时结束。现在需要一个循环遍历每个并检查用户日期是否属于哪个阶段。所以:“SectionID - phase1needed phase1start phase1end .....”
优势:- 可以手动确认数据并以二级形式很好地显示
- 它使数据库保持小
缺点: - 实际的循环需要经过(在最坏的情况下)所有阶段才能找到正确的循环。
计算一个新的数据库,它只是“IdSection - Date - Phase”,并计算每个部分的阶段和间隔中的每一天。
优势:- 这将运行时计算保持为每个部分一个查询
- 访问应该处理大量数据
缺点: - 我无法手动检查我所做的是否对所有部分都正确
- 启动时需要很长时间,就像真的很长一样
- 该数据库中将需要很多条目
现在我问你更喜欢哪个,或者即使有不同的方法?我无法真正改变我拥有的数据点。
简而言之,我必须显示不同阶段的时间间隔,并且在数据库中我只有时间起点,没有完整的阶段顺序。
谢谢你的想法,在这类事情上的任何经验都会有所帮助