2009-08-21 8 views
8

私は通常、自分のデータベースを構築するときに私のズボンの座席で飛んでいます。しかし、私の新しいプロジェクトではかなりの計画が必要になります。私はデータベース開発のために学校に通ったことはありませんでしたので、私は計画プロセスについて正式な訓練を受けていません。大きなデータベースを計画する上でのヒント

これらのことを計画するための優れたソフトウェア、方法論はありますか?

+4

"large"の値はどれくらいですか? – cletus

+1

大規模なディスクまたは大規模なスキーマはありますか? – Sam

+0

大変申し訳ございませんが、大規模なスキーマ – simonwjackson

答えて

5

すべてを前面に設計しようとすることの罠に陥ることはありません。それは単にできません。プロジェクトが進行するにつれて、すでに実装している機能をより良い方法で実装することができます。また、プロジェクトの経験を積むと、ドメインについての洞察と、データベースの最適な設計方法が得られます。

私はアジャイルアプローチをとることをお勧めします。その時にlitteビットを設計してください。そして、あなたがすでに作成したものがより良い方法で設計されているのを見ると、それをリファクタリングすることができます。 これはコードスキーマとデータベーススキーマの両方に適用されます。

ただし、注意してください。ビジネスロジックをリファクタリングするのは簡単です(ビジネスロジックをデータベースに配置しない限り、そうではありません)。アプリケーションを起動した後、データを維持する必要があるため、起動後にデータベースをリファクタリングすることはかなり困難です。したがって、あるフィールドを別のテーブルに移動する必要がある場合は、変更スクリプトが必要です。

だから、あなたが打ち上げに近づいたら、もう少し先を計画することは良い考えです。しかし、開発の初期段階では、私は機敏にアプローチすることを絶対に勧めます。一度に1つのテーブルを作成します。一度に1つのフィールド。

1

事前に使用例とサンプルコードを検討することは、データベース設計において大きな助けとなりました。これは、単一のSQL文を記述することなく、データベースの整合性をテストする優れた方法です。

幸運を祈る!

+0

はい、それに対してクエリを書くようにしてください。 – Sam

0

これは、リポジトリパターンが大いに役立つ1つの場所です。私は、ソフトウェアをどのように動作させたいのかを知っているときにそのパターンを使用しますが、データの明確なアイデアがないときです。一般に、モックオブジェクトを作成/リファクタリングする方が、テーブルやバッキングストアドプロシージャ/クエリを変更するよりもはるかに簡単です。

2

アクセスを高速化するために、テーブルを別のディスクに分割することができます(mySQLはこれを行うことができます)。高速ディスクを入手できます。

多分、大きなテーブルのように大きいことを意味します。これはかなり大きな話題だが、あなたはこれらを起動することができます。

  • あなたのテーブルの主キーを定義する外部キー
  • を定義することによって、それらのテーブル間のリレーションシップを作成して、頻繁に使用されるWHEREフィールド
  • に索引を作成します。

パンツの座席を飛んでいる開発者の中には、そのようなことはしません。先に考えるための功績。

Visioは関係図を作成できます。それで紙と鉛筆ができます。あなたのスキーマを設計するとき、あなたがやっているかわからない場合は、最初の数normal formshttp://en.wikipedia.org/wiki/Data_modeling

8

スティック:ここ

データモデリングテーマに関するいくつかの情報です。あなたの設計ミスを後で理解すると、他のどの方法よりも簡単に変更を加えることができます。

ご不明な点がありましたら、お気軽にご意見ください。データベース設計を視覚化する最も簡単な方法は、エンティティリレーションシップダイアグラム(ER Diagrams)を使用することです。また、コードを掘り下げずにデザインがどのように見えるかを簡単に確認することもできます。

8

E-R Diagramsに描画すると、複雑さの管理に役立ちます。

編集: さらに、E-Rダイアグラムをリレーショナルスキーマに変換するのに役立つ規則やガイドラインがあり、そのプロセスを支援するツールもあります。

1

スキーマのバージョン管理について考えてみましょう。時間の経過とともにデータベースのスキーマの変更をどのように処理する予定ですか?データを移行またはアップグレードする必要がありますか?開発中にデータを捨てることはできますか?

初期段階から、テスト、ステージング、ライブ用のデータベースを別々にしてください。

多くの画像を描画します。

0

名前付け規則から始めます。私は*ビューのために(名)_NMと(数字用)_num、V_など

何も地球粉砕を使用していますが、なくて、独自のテーブル名や列名を推測することができるとき、それはあなたの仕事を簡単にするんそれらを見なければならない。あなたが選んだものではなく、それが賢明で一貫していることを確認してください。大部分の専門DAはテーブル名に大文字のみを使用します。

個人的には、ID(通常はPK)を持つすべてのテーブルのIDにIDを使用してから、外部キーの関係に_IDという関係を表すIDを使用します。たとえば、

テーブルSCHOOLにはIDのPKがあります。

テーブルSTUDENTには、テーブルSCHOOL、SCHOOL_IDを参照するIDのPKとFKがあります。

ERDを持たない学生テーブルを見ると、SCHOOL_IDがSCHOOL.IDを参照していることが容易にわかります。また、SQL文を読むときにもうまく見えます。データモデリングツールに関しては

、アーウィン:私は最高の大規模なスキーマを設計する方法上の任意のアドバイスを提供する前に http://www.ca.com/us/data-modeling.aspx

0

だから、私は一つの質問を依頼する必要があります:大きなスキーマは絶対に必要ですか?

大規模なシステムを計画するための優れたソフトウェア方法があるかどうか尋ねました。確かに存在し、複雑なソフトウェア開発の最善のアプローチの1つは、SOA:Service Oriented Architectureです。データベース・レベルを超えてSOAのベスト・プラクティスを少し学びたいなら、Thomas Erlsの書籍、特に彼のSOA「サービスの設計の原則」を調べることを強くお勧めします。私はまた、サービス指向とドメイン指向の設計とアーキテクチャに関するUdi Dahanの講義を聞くことを強くお勧めします。これらの男たちの両方から得た良い知識がたくさんある。

データベースに関しては、非常に大規模で複雑なスキーマに潜入して開発する前に、本当に本当に本当に必要なものであることを確認してください。サービス指向の環境では、解決しようとしているビジネス上の問題の別個のサービスの間に明確で破られない境界を特定することが目的です。これらの境界を特定したら、そこに作成できるより小さなスキーマがあることがわかります。場合によっては、境界を越える必要があるときに、あるサービスから別のサービスに情報を公開する必要があるため、データの重複が発生することがあります。しかし、複雑ではない複雑なスキーマをいくつか持つことのメリットは巨大になる可能性があります。単一の巨大なスキーマを使用する場合よりも自律性、移植性、柔軟性、保守性が向上します。

SOAに目を向け、特にサービス指向アーキテクチャーでデータベースを処理する方法。 Udi漢によって与えられた以下のプレゼンテーションでは、いくつかの非常に便利な洞察を提供する必要があります

http://www.vimeo.com/5022174

0

ダウンロードとMySQLのワークベンチツールを使用してデータベースを構築します。データベースの構築と維持に役立ちます。

関連する問題