高度なPHPアプリケーションを作成するときにmysqlデータベースを設計する方法をどのように知っていますか?

StackOverflow https://stackoverflow.com/questions/200257

  •  03-07-2019
  •  | 
  •  

質問

ショッピングカートやフォーラムをphpで作成したことはありません。別の人のプロジェクトの表示と分析、またはそのようなプロジェクトの作成方法やそのようなプロジェクトになる方法を示すチュートリアルの表示は別として。そのようなものを作成するためにデータベース構造を設計する方法をどのように知っているでしょうか?おそらく試行錯誤で推測しています...

役に立ちましたか?

解決

データベース設計について学ぶことができる主な手法は、データベースの正規化と呼ばれます。

データベースの正規化には、特に多くのトランザクションがある場合に制限があります。ある時点で、非正規化を強制される場合があります。

しかし、私は常に正規化されたデータベース設計から始める方が良いです。

他のヒント

正規化の基本を読んで理解する必要があります。ほとんどのプロジェクトでは、第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を更新するだけです)

また、データベーススキーマの作成にはビジュアルエディタを使用することをお勧めします。私は最近使用しています: http://dev.mysql.com/workbench/

データベースの設計を作成したら、経験のある人に目を通して、フィードバックを提供してください。ただし、設計に費やすことができる限り多くの時間を費やすと、最終的には実装を行う必要があり、何かが欠けているか、別の方法でより良い仕事ができることがわかります。

だから、設計、フィードバックを得るが、変更することを恐れないでください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top