【问题标题】:Querying data from multiple clustered tables as one unified从多个聚簇表中统一查询数据
【发布时间】:2010-10-19 00:22:57
【问题描述】:

我最近开始了一个项目,该项目涉及为一个相当老的软件创建一个基于 Web 的报告界面,该软件负责管理一些访问控制硬件,例如电子门锁。
我选择 CakePHP 来完成这项任务,它所涉及的只是查询数据库中的日志记录并将它们显示在网站上。该软件是用 C++ 编写的,使用 MSDE(Microsoft SQL Server 7.0 或 2000 的缩小版),我能够配置 CakePHP 使其成功连接到数据库。

问题在于该软件的开发人员选择通过为每天创建一个单独的表来将日志存储在数据库中。所以它看起来像这样:

tbl_DoorEvent_2008_08_07
tbl_DoorEvent_2008_08_08
tbl_DoorEvent_2008_08_09
tbl_DoorEvent_2008_08_10
...

我对 MSDE 不是很熟悉,但我仍然怀疑设计和维护这样的数据库是否可以接受。我不知道桌面软件是如何设法解析查询所有信息的,但我的 CakePHP 应用程序在处理这些信息时遇到了一些困难。

我想在 Web 应用程序中坚持使用 MVC,但我不知道如何在 CakePHP 中实现 DooreventModel,以便它从所有分区表中获取信息。
我尝试过一些技巧,比如使用

UNION ALL SELECT * FROM tbl_DoorEvent_2008_08_07
UNION ALL SELECT * FROM tbl_DoorEvent_2008_08_08
....

这种工作,但是当我想对整个查询或任何其他 SQL 运算符执行 WHERE 限制时,它不起作用。

还有一个要求是基于 Web 的应用程序不添加或创建任何其他数据库或表,而只使用现有的数据库或表来显示报告,因此创建一个包含所有集群表的巨大表并不是真的一个选项。

我只是希望有人会想出一个 SQLServer 函数,它会在我每次执行查询时将所有表合并为一个,但我知道这有点乐观,所以我真的愿意接受所有建议。 请记住,该解决方案必须与 CakePHP 一起使用,并作为 MVC 中的单个模型

【问题讨论】:

    标签: sql sql-server database cakephp msde


    【解决方案1】:

    如果将联合放在子查询中,则可以使用 where 语句:

    SELECT *
    FROM (
        SELECT * FROM tbl_DoorEvent_2008_08_07
        UNION ALL 
        SELECT * FROM tbl_DoorEvent_2008_08_08
    ) sub
    where sub.MyKey = MyValue
    

    或者创建一个视图:

    CREATE VIEW vw_MyView
    AS
    SELECT * FROM tbl_DoorEvent_2008_08_07
    UNION ALL 
    SELECT * FROM tbl_DoorEvent_2008_08_08
    

    之后就可以查询视图了:

    SELECT * from vw_MyView where MyKey = MyValue
    

    附:切勿在生产查询中使用 *,尤其是视图。

    【讨论】:

      【解决方案2】:

      您可能想要partitioned view

      【讨论】:

      • 是的。因为在这种情况下,它只是一个简单 UNION ALL 视图的正确名称,由于奇怪的表模式,它是一个分区视图。它与“真正的”分区表和以高级方式管理它们无关。看,尽管上面的答案和我的一样,但还是被赞成了。
      猜你喜欢
      • 2020-01-30
      • 2017-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-04
      • 2020-11-29
      相关资源
      最近更新 更多