web-dev-qa-db-ja.com

SQLデータベース設計の初心者向けガイド

SQLソリューションの設計方法を学ぶための優れた情報源を知っていますか?

基本的な言語構文を超えて、私が理解するのに役立つ何かを探しています:

  1. 構築するテーブルとそれらのリンク方法
  2. さまざまな規模に合わせて設計する方法(小規模なクライアントアプリから巨大な分散Webサイトへ)
  3. 効果的/効率的/エレガントなSQLクエリを書く方法
124
ripper234

私はこの本から始めました: リレーショナルデータベース設計の明確な説明(データ管理システムのモーガンカウフマンシリーズ)(ペーパーバック) Jan L. Harrington

そして、あなたがこれに慣れると、これも良かったです データベースシステム:設計、実装、管理への実践的アプローチ(国際コンピューターサイエンスシリーズ) (ペーパーバック)

SQLとデータベースの設計は異なる(しかし補完的な)スキルだと思います。

59
inspite

この記事から始めました

http://en.tekstenuitleg.net/articles/software/database-design-tutorial/intro.html

本全体を読むのに比べてかなり簡潔で、データベース設計の基本(正規化、関係の種類)を非常によく説明しています。

36
Julius

経験は非常に重要ですが、テーブル設計に関しては、HibernateやGrailsなどのORMがどのように動作するかから多くのことを学び、それらがなぜ機能するのかを知ることができます。加えて:

  1. さまざまな種類のデータを別々に保持します-注文テーブルに住所を保存しないでください。たとえば、個別の住所テーブルの住所にリンクします。

  2. 私は個人的に、主キーである各テーブルに整数または長い代理キーを持っているのが好きです(データを保持し、異なるテーブルを一緒にリンクするものではなく、たとえばm:n関係)。

  3. また、タイムスタンプ列を作成および変更するのが好きです。

  4. クエリで「where column = val」を実行するすべての列にインデックスがあることを確認してください。おそらく、データ型にとって世界で最も完璧なインデックスではなく、少なくともインデックスです。

  5. 外部キーをセットアップします。また、オブジェクト構造に応じて、カスケードまたはnullを設定する関連するON DELETEおよびON MODIFYルールを設定します(したがって、オブジェクトツリーの「ヘッド」で一度削除するだけで、そのオブジェクトのすべてのサブオブジェクトが取得されます自動的に削除されます)。

  6. コードをモジュール化する場合、DBスキーマをモジュール化することができます。たとえば、これは「顧客」エリア、これは「注文」エリア、これは「製品」エリアで、結合/リンクテーブルを使用しますそれらは1:n関係であっても重要な情報を複製する可能性があります(つまり、製品名、コード、価格をorder_detailsテーブルに複製します)。正規化について読んでください。

  7. 他の誰かが、上記の一部またはすべてに対してまったく反対のことを推奨します。

28
JeeBee
14
user2287824

Head First SQL は素晴らしい紹介です。

6
Dickon Reed

私がそれを読んでからしばらく経ちました(そのため、どれだけ関連性があるのか​​わかりません)が、私の記憶は、Joe CelkoのSQL for Smartiesの本がエレガントで効果的で効率的なクエリを書くための多くの情報を提供していることです。

2
user29208

これらは私の意見では、異なる領域から異なる知識を必要とする質問です。

  1. 構築する「どの」テーブルを事前に知ることができないので、解決しなければならない問題を知り、それに応じてスキーマを設計する必要があります。
  2. これは、データベース設計の決定とデータベースベンダーのカスタム機能の組み合わせです(つまり、(r)dbmsのドキュメントを確認し、最終的にスケーリングの「ヒントとコツ」を学ぶ必要があります)、dbmsの構成も重要ですスケーリング(レプリケーション、データパーティション分割など);
  3. 繰り返しますが、ほとんどすべてのrdbmsにはSQL言語の特定の「方言」が付属しているため、効率的なクエリが必要な場合は、その特定の方言--btwを学習する必要があります。多くの場合、効率的でエレガントなクエリを書くことは大したことです。エレガンスと効率はしばしば矛盾する目標です。

つまり、多分あなたはいくつかの本を読みたいと思うかもしれません、個人的に私は this book を私のdatbase大学のコースで使用しました私のアドバイスは、データベース設計の良い本をチェックすることです。

2
cheng81