PHP でショッピング カートやフォーラムを作成したことがありません。他の人のプロジェクトを表示して分析したり、そのようなプロジェクトの作成方法やそのようなプロジェクトになる方法を表示するチュートリアルを表示したりすることは別として. そのようなものを作成するためのデータベース構造をどのように設計すればよいのでしょうか? おそらく試行錯誤で推測しています...
3 に答える
正規化の基本を読んで理解する必要があります。ほとんどのプロジェクトでは、第 3 正規形に正規化するだけで問題ありません。多かれ少なかれ正規化が必要な場合は常に特定のシナリオがありますが、その背後にある概念を理解すると、データベースが正規化された形式でどのように構造化されているかを考えることができます。
テーブルを正規化する非常に基本的な例を次に示します。
students
student_id
student_name
student_class
student_grade
さまざまなデータを含む非常に標準的なテーブルですが、いくつかの問題がすぐにわかります。学生の名前は ID に依存していることがわかりますが、学生が複数のクラスに参加している可能性があり、各クラスの成績が異なる可能性があります。次に、テーブルについて次のように考えることができます。
students
student_id
student_name
class
class_id
class_name
これは悪くありません。さまざまな生徒とさまざまなクラスがあることがわかりますが、生徒の成績は取得していません。
grades
student_id
class_id
grade
これで、特定の生徒、特定のクラス、およびそのクラスに関連付けられた学年の間の関係を理解できる 3 番目のテーブルができました。最初の初期テーブルから、正規化されたデータベースに 3 つのテーブルができました (例として、これ以上成績を正規化する必要はないと仮定しましょう :) )
この非常に基本的な例から、いくつかのことがわかります。
- データはすべて何らかのキー (student_id、class_id、student_id + class_id) に関連付けられています。これらは、各テーブル内の一意の識別子です。
- キー付きの関係により、情報を相互に関連付けることができます (学生 #4096 は何クラスに登録されていますか?)
- これで、テーブルに重複したデータが含まれていないことがわかります (最初のテーブルについて考えてみてください。ここで、student_class は多くの学生で同じ値になる可能性があります。クラス名を変更する必要がある場合は、すべてのレコードを更新する必要があります。正規化された形式で、class_id の class_name を更新するだけです)
データベース設計について学ぶことができる主な手法は、データベースの正規化と呼ばれます。
特に多くのトランザクションがある場合、データベースの正規化には限界があります。ある時点で、Denormalizeを余儀なくされることがあります。
しかし、標準化されたデータベース設計から始める方が常に良いでしょう。
また、データベース スキーマの作成にはビジュアル エディターを使用することをお勧めします。私は最近使用しています:http://dev.mysql.com/workbench/
データベース設計を作成したら、経験豊富な人にそれを見てもらい、フィードバックを提供してもらいます。しかし、設計に費やすことができる限り多くの時間を費やしたとしても、最終的には実装を行う必要があり、何かが欠けていることに気付くか、別の方法でより良い仕事をすることができることを知っておいてください.
ですから、設計し、フィードバックを得てください。ただし、変更を恐れないでください。