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


127

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

基本的な言語構文のほかに、理解に役立つ何かを探しています。

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

回答:


60

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

速度を上げると、これも良かったデータベースシステム:設計、実装、および管理への実用的なアプローチ(国際コンピュータサイエンスシリーズ)(ペーパーバック)

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


1
データベース設計の開始:初心者からプロフェッショナルへ-Clare Churcher?
熱狂的なオタク

40

私はこの記事から始めました

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

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


ありがとう、このガイドが大好きです。
MsO 2016年

この回答のリンクは機能していません。
Grizzly Peakソフトウェア

1
リンクが再び機能しているようです。
user8576017 2018

1
リンクが機能しなくなった
jat255


28

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

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

  2. 私は個人的に、主キーである各テーブルに整数または長いサロゲートキー(m:nの関係など、異なるテーブルをリンクするものではなく、データを保持する)を保持するのが好きです。

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

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

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

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

  7. 他の誰かが上記の一部またはすべてに対してまったく反対のことをお勧めします:p-いくつかのことを行うための真の方法は決してありません!


1
ORM、あなたのすべてのポイントは反データベースです。
PerformanceDBA、

1
インデックスを追加しても、速度が上がるとは限りません。ときどき実際にクエリが遅くなることがあります。それは実際にはクエリに依存しておりexplain analyze、インデックスが有益かどうかをテストする必要があります。
ArashM 2016



2

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

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

とはいえ、いくつかの本を読みたいと思うかもしれませんが、個人的に私はこの本を私のdatbase大学のコースで使用しました(そして、まともな本を見つけましたが、この分野では他の本を読んだことがないので、私のアドバイスは、データベース設計に関するいくつかの優れた書籍)。


2

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


2010年の第4版は最新版である可能性があります
rleir

1
Celkoの本はエラーに関する研究であり、データベースに実装する必要があるものをコードで実装するという概念を促進しています。
PerformanceDBA、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.