1

私はジュニアプログラマーであり、特にデータベース設計の初心者です。

少し前に、暇なときに、Javaで株価の変化を追跡してグラフ化するプログラムを作成しました。当時、DBをインストールするのは面倒だったので、CSVファイルの山を使用してデータを保存し、各株の1つを追跡しました(GOOG.csv、BHP.csvなど)。

Iv'eは、データベースを学習アクティビティとして使用するように更新することにしましたが、私の設計ではハードルにぶつかりました。株式ごとに個別のデータパイルの以前の設計を継続するか、それらを統合する必要があります。つまり、追跡された株式ごとにテーブルを作成し、日ごとのデータの新しいレコードを作成する必要があります。または、株式の識別子を使用した一般的な「株式データ」テーブルを作成する必要があります。

最初の方法はもっと簡単に思えます。すべてのレコードを取得するのは簡単です。

SELECT * 
FROM GOOG

2番目は

SELECT *
FROM stock_data
WHERE stock_name="GOOG"

私が言ったように、私は完全なデータベース初心者です。私には、最初の方が高速であるように見えますが、全体的に設計が貧弱で管理が難しく、拡張性が高くありません。2つ目は、1つ目が問題ない場合、不必要に遅くなる可能性があるようです。

私のプロジェクトの規模のために、どちらもうまくいく可能性が高いと思いますが、このタイプの問題の原則として、どちらが正しい設計の選択でしょうか?

賢明なDB設計のアドバイスは大歓迎です。:)

4

1 に答える 1

1

偶然にも、私も自分の投資を追跡するために同様のプログラムを作成しました。適切なスキーマは

STOCKS
id or stock tracker or something unique
name

PRICES
stock (foreign key to stocks)
curdate
price

価格表の主キーは、株式+curdateです。

購入、販売、配当、およびコストを追跡する場合は、少なくとももう1つのテーブル(2つではない場合)が必要になります。私の投資のほとんどは複雑な償還スキームのある債券に投資しているので、それらのための特別なテーブルもいくつかあります。

于 2012-10-22T08:18:18.780 に答える