2011-01-20 18 views
2

私は奇妙な問題があり、どこでも答えを見つけることができないようです。私は電気費用を計算するために小さなRuby on Railsアプリケーションを構築しています。データベース - 動的テーブル選択

これについては、私は関税が人にあるかもしれないことを知る必要があります。これは通常の関税にとっては問題ありません。 (例:通常、人々は昼夜用のキロワットワット当たりの設定コストを課しています。)>関税表(各タイプの関税タイプの静的データ)

しかし、私の問題は、今や一部の人が動的料金表になっているということです。したがって、基本的に1時間ごとに電力ネットワークの全体的な需要に応じてコストが上昇または下降します。だから私は静的な関税率のデータと動的な関税率の両方のデータを持っています。

私はこのような何かを考えていた:
顧客テーブル=> ID、名前、TariffID、などなど
関税表=> ID、タイプ
静的関税表=> IDキロワット、TariffIDあたりのコスト、など
ダイナミック関税表=> IDキロワット、タイムスタンプあたりのコスト、TariffID

そして私は、静的または動的テーブルを使用するように知っているだろう関税表に関税の種類によって異なります。

また、私はその日の各時間の電力使用に対する一日の各時間のコストを計算するために各動的関税のタイムスタンプを記録する必要があるが、私は静的なもののためにそれを必要といけない;)

私にとってこれは少し重く見えます。誰かがもっと微妙な解決法を提案できるかどうか疑問に思っていましたか?事前に

おかげで、

シーマス

答えて

2

あなたはSingle Table Inheritance上に読むことをお勧めします - これはそれのために良いユースケースのように思えます。

Stack Overflow questionにもこの情報には多くの良い情報があります。

関税表、すべての共通コードを持つ関税クラス、そして料金表から継承するStaticTariffおよびDynamicTariffクラスが必要なようです。このようにして、サブクラスのメソッドをオーバーライドして1時間当たりのコストを計算することができます。 DynamicTariffはおそらく日付/時刻に基づいて計算を行う必要がありますが、StaticTariffはdbの列値を返す可能性が高いため、簡単です。

2つの間の共有コードは、親の関税クラスに安全に置くことができます。

+0

Brett、ありがとうございました。STIの記事を読んでください。 – Seamus

0

ユーザーは、静的なものから動的なものまで、時間の経過とともに関税を変更できますか?もしそうなら、あなたのスキーマは十分ではありません。

また、時間ベースの動的料金表が複数あるかどうかは言いません。

STIを使用すると、StaticTariffとDynamicTariffの両方が「is a」関税テストに合格するという意味になります。しかし、これらの2つの具体的な実装は十分に異なっているため、同じテーブルにその詳細を格納するのはおそらく意味がありません。

私はTariffCalculator.cost(:user => user, :time_range => time_range)の両方の線に共通のAPIのようなものを示唆し、具体的な実装を内部的に選択することに対処します。この時点では、データベース構造の邪魔にならないようにしてください。インターフェイスをきれいに保ち、十分にテストしてください。 D

+0

ありがとうございます。noodlありがとうございます。ユーザーは時間の経過とともに関税を切り替えることができ、異なる動的料金表を持つことさえできます。に切り替える。だから、私は思っているほど簡単な時間を振り返って過去の関税を覚えておく必要があります。あなたが何を提案し、私が何を考えているかを見てください。ご協力いただきありがとうございます :) – Seamus