2009-04-12 8 views
0

最近、電子ドアロックなどのアクセス制御ハードウェアを管理するかなり古いソフトウェア用のWebベースのレポートインターフェイスを作成するプロジェクトを開始しました。
私はタスクのためにCakePHPを選択しました。それはすべて、データベースにログレコードを照会し、それらをWebサイトに表示することです。ソフトウェアはC++で書かれており、MSDE(Microsoft SQL Server 7.0または2000の縮小版)を使用しており、CakePHPを設定してDBに正常に接続できるようにしました。複数のクラスタ化されたテーブルのデータを統合してクエリする

問題は、このソフトウェアの開発者が、毎日別のテーブルを作成してデータベースにログを保存することを選択したことです。だから、次のようになります。

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を実装する方法がわからないので、すべてのパーティションテーブルから情報が得られます。
私はクエリ全体に対する制限や他のSQL演算子は、それが動作しませんWHERE実行する場合

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

と作品のこの種を使用したが、のようないくつかのハックを実装しようとしました。

また、Webベースのアプリケーションで追加のデータベースやテーブルを追加または作成せず、既存のものを使用してレポートを表示するので、クラスタ化されたものをすべて含む本当にオプションです。

誰かが私がクエリを実行するたびにすべてのテーブルを1つにまとめてしまうSQLServer関数を思いついてくれることを願っていますが、これは少し楽観的なことを知っています。 そして、ソリューションはCakePHPとMVCの単一モデルとして動作する必要があります。

+0

plzsendzmetehcode? –

+0

ミッチ、どのようなコードですか? – duckyflip

答えて

1

おそらくpartitioned viewが必要ですか?

+0

MSDEの分割ビュー – gbn

+0

はい。このケースでは、単純なUNION ALLビューの健全な名前です。これは、奇妙な表スキーマのために、パーティション化されたビューです。 「真の」パーティション表とは無関係で、高度な方法でそれらを管理します。参照してください、上の答えはupvotedそれは私のものと同じことにもかかわらず。 – GSerg

3

あなたはサブクエリで労働組合を置く場合は、どこのステートメントを使用することができます。

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 

PSプロダクションクエリで*を使用しないでください。特に、ビューは表示されません。

関連する問題