回答:
私はこの本から始めました:リレーショナルデータベースのデザインを明確に説明(データ管理システムのモルガンカウフマンシリーズ)(ペーパーバック) Jan L. Harringtonによる
速度を上げると、これも良かったデータベースシステム:設計、実装、および管理への実用的なアプローチ(国際コンピュータサイエンスシリーズ)(ペーパーバック)
SQLとデータベースの設計は異なる(ただし補完的な)スキルだと思います。
私はこの記事から始めました
http://en.tekstenuitleg.net/articles/software/database-design-tutorial/intro.html
本全体を読むのに比べてかなり簡潔で、データベース設計の基本(正規化、関係のタイプ)を非常によく説明しています。
経験は非常に重要ですが、テーブルの設計に関しては、HibernateやGrailsなどのORMがどのように機能するかを理解するために、それらがどのように動作するかから多くを学ぶことができます。加えて:
さまざまな種類のデータを分離してください-注文テーブルに住所を保存しないでください。たとえば、別の住所テーブルの住所にリンクします。
私は個人的に、主キーである各テーブルに整数または長いサロゲートキー(m:nの関係など、異なるテーブルをリンクするものではなく、データを保持する)を保持するのが好きです。
また、タイムスタンプ列を作成および変更することも好きです。
クエリで「where column = val」を実行するすべての列にインデックスがあることを確認してください。データ型としては、世界で最も完璧なインデックスではないかもしれませんが、少なくとも1つのインデックスです。
外部キーを設定します。また、オブジェクト構造に応じて、カスケードまたはnullに関連するON DELETEおよびON MODIFYルールを設定します(オブジェクトツリーの「先頭」で一度削除するだけで、そのオブジェクトのすべてのサブオブジェクトが取得されます。自動的に削除されます)。
コードをモジュール化する場合は、DBスキーマをモジュール化する必要があります。たとえば、これは「顧客」領域、これは「注文」領域、これは「製品」領域であり、結合/リンクテーブルを使用します。それらが1:nの関係であっても、重要な情報を複製する場合があります(つまり、製品名、コード、価格をorder_detailsテーブルに複製します)。正規化について読んでください。
他の誰かが上記の一部またはすべてに対してまったく反対のことをお勧めします:p-いくつかのことを行うための真の方法は決してありません!
explain analyze
、インデックスが有益かどうかをテストする必要があります。
Head First SQLは素晴らしい導入です。
これらは、私の意見では、異なるドメインからの異なる知識を必要とする質問です。
とはいえ、いくつかの本を読みたいと思うかもしれませんが、個人的に私はこの本を私のdatbase大学のコースで使用しました(そして、まともな本を見つけましたが、この分野では他の本を読んだことがないので、私のアドバイスは、データベース設計に関するいくつかの優れた書籍)。
読んでからしばらく経っています(そのため、どれだけ関連性があるのかはわかりません)が、私の思い出として、Joe CelkoのSQL for Smartiesの本は、エレガントで効果的で効率的なクエリの記述に関する多くの情報を提供しています。