SQL】ふじの記録52019.11.27|Java研修メモこんにちは~、ふじです。今回は本日勉強したSQLのテーブル設計について書いていこうと思います。テーブル設計データベースを用いたシステムは、SQLやDBMSの機能に関する知識だけでは開発できません。お客様からの要件を理解し、データベース設計に適切に落とし込む方法論を活用しなければいけません。お客様から要件聴取をした後、1概念設計2論理設計3物理設計といった工程でテーブルを設計していきます。抽象的な概念としてどのようなエンティティ(情報の塊)を管理しなければならないかを明らかにします。通常エンティティは複数の属性(テーブルの列のようなもの)を持っています。計算、集計をすれば算出可能な値等。3同じ用語に関連がありそうなものはまとめる。4エンティティ名と属性名に分ける。3でまとめたグループの中で「~の~」が成り立つ場合、前者がエンティティ名で、後者がその属性名になる。家計管理の概念で考えた場合の「入出金明細の金額」は入出金明細がエンティティ名で金額が属性名にあたる。要件を聞いてエンティティと属性を導き出すのは大変そうですね...論理設計この工程での目的はエンティティをリレーショナルデータモデル(関係性のある複数の二次元表)で取り扱いやすい形のテーブルに変形することです。変形に必要なことはキー設計と正規化です。他のエンティティとリレーションシップを持てるようになる外部キーを持たせるために、それぞれのエンティティには主キーを持たせる必要があります。主キーを持たないエンティティには人工キー(人工的な主キー)を追加します。エンティティ同士が多対多の属性の関係を持っている場合、RDB(リレーショナルデータベース)はこの関係を上手く扱うことができないので中間エンティティを設定し「1対多」に変換する必要があります。ここからRDBの形をどんどん整えていきます。おける最も中心的な作業はこの正規化という作業です。整合性の崩れやすい非正規形から第3正規形まで変形させて崩れにくくします。一つのセルに値が複数入ってるものを整えて、テーブルのすべての行のすべての列に1つずつ値が入っている状態にすることです。第2正規形は主キーに対して列が従属しているテーブルです。この関係性のことを関数従属性といいます。複合主キーの一部の列に対してのみ関数従属する列がある場合は、その部分を切り出して別テーブルを作りきれいな関数従属を作る必要があります。第2正規形に加え、主キー以外の列同士で従属する列が存在していない状態を第3正規形といいます。この間接的に関数従属することを推移関数従属といいます。推移関数従属は第2正規形の時と同じように、切り出して別テーブルを作り正規化します。これでやっときれいな形になります。テーブルについて詳細な設計を確定させます。文字通り物理的な設計ですね。場数に踏んで慣れていくのに対し、この段階では日々の勉強の成果もかなり関わってきますね。最後に以上、今回はSQLのテーブル設計について見てきました。頭に入ってきますね、前回のJavaのオブジェクト指向もそれで理解が深まりました。