Web開発における適切なデータベース設計の基礎

データベースは、Web開発の世界のほとんどのプロジェクトを含め、あらゆる場所で使用されています。 シンプルなブログやディレクトリから、本格的なソーシャルWebプロジェクトまで、あらゆるもの。 サイトおよび対応するデータベースの複雑さに関係なく、効率的かつ確実に機能するためには、それぞれが慎重に設計する必要があります。





この記事では、最終的な目的に関係なく、優れたデータベースプランを開発するための基本について説明します。 データベース構造のすべてのバリアントについて、使用する必要がある標準ルールとベストプラクティスのセットがあります。 データベースを整理し、より合理的かつ効果的な方法でサイトとやり取りするのに役立ちます。



データベースに必要な機能



計画で使用する最初の方法は、データベースに保存する必要があるものとサイトに必要なものに応じて、紙などにメモをとる定期的なブレインストーミングセッションです。 特定のフィールド、特定のケースで使用されるテーブルについて考えないようにしてください-すべての特定のポイントは後で考慮されます。 この段階での目標は、データベース構造の一般的で完全な図を取得することです。その後、データベース構造を洗練し、より詳細に作成します。 将来的には、初期段階よりも計画にいくつかの要素を追加することがより困難になる場合があります。



写真: binaryape


データベースから抜け出します。 サイトから何が必要かを考えてみてください? たとえば、人々を結び付けるサイトを作成する場合、ユーザーが保存するデータについてすぐに考え始めることができます。 後回しにするのを忘れてください。 ユーザーとユーザーに関する情報はデータベースに保存する必要があることを書き留めておいた方がよいでしょう。 他に何? ユーザーはあなたのサイトで何をしますか? レコードを公開し、ファイル、写真をアップロードし、お互いにメッセージを書きますか? したがって、データベースには、レコード、ファイル、写真、メッセージなどのすべての情報を保存する必要があります。

ユーザーはどのようにサイトを操作しますか? たとえば、お気に入りのレシピを検索したり、特定のコミュニティが利用できる記録にアクセスしたり、製品を検索したり、最近表示および購入した製品のリストを表示したりする必要がありますか? データベースは、レシピ、特定のユーザーサークルが利用できる「クローズド」レコード、製品情報、および特定の製品とユーザー間の通信の可能性を保存する機能を提供する必要があります。



必須のテーブルとフィールドの定義



次のステップでは、データベースに必要なテーブルとフィールドを決定します。 これが開発の中核であり、最も難しい部分です。 テーブルをリンクするための正しい方法を使用して、各テーブルのデータ構造を決定し、このデータを異なるテーブルに分散させる必要性を特定します。これらの問題はすべて、データベースの直接設計に起因します。 次に、明らかに必要なテーブルとフィールドのリストを定義する必要があります。できるだけ具体的にしてください。 このプロセス中に、データベースの効率とセキュリティを向上させるために、一部の要素を再配置または再編成できます。



データモデリングツールを使用する



サイトで何をする必要があるかがわかったので、次に、どの特定の情報を保存する必要があるかを判断します。 ここでは、特にMySQL WorkbenchDBDesigner4などの視覚的なデータベースモデルを作成する機能を備えた、データベースを設計するためのツールが非常に適切です。 Gliffyは、さまざまなフローチャートとデータベースモデルを作成するための優れた無料のオンラインツールです。



私の意見では、よりよく知られた高品質のツールもあります-Microsoft Visio (Windowsのみ、価格249.99ドル)。 しかし、心配しないでください。安価な代替品があり、その多くは上記の2つを含むオープンソースプロジェクトです。

データベースモデルの作成に必要な一般的なグラフィックシンボルと標準の視覚要素に精通し、フローチャートと図を使用して予備計画を開始します。 これにより、特定のデータベースが作成される前の論理エラーを回避できます。



リレーショナルデータベース



ほとんどのデータベースはリレーショナルデータベースです。 これは、データベース内のテーブルが何らかの方法で相互接続されていることを意味します。 たとえば、オンラインストアのWebサイトに「ユーザー」がいる場合、注文に関する情報に基づいて、または目的の製品を示すことで、特定の製品に確実に関連付けることができます。 ブログデータベースの場合、作成者は自分が書いた投稿に何らかの方法で接続する必要があり、許可されたユーザーは残したコメントにリンクする必要があります。

リレーショナルデータベースの特定の方法を使用して、ユーザー用、メモ用、コメント用、製品用など、個別のテーブルに大量の情報を整理された形式で保存できます。 これで、一意のキーを使用して異なるテーブルのデータをバインドできます。



各テーブルのエントリには、一意のキーが必要です。 これは、記録のための一種の「社会保障措置」または「バーコード」です。 各エントリに固有です。 また、他のレコードが同じテーブルに同じ識別子を持つことはできません。 データベースに一意の名前または製品名があるだけでは不十分です。 はるかに効率的なのは、一意の主キーの使用です。 データベース内のいくつかの一意のフィールドでさえ、データ重複の可能性からデータベースを保護しません。データ重複は、その後サイトに悪影響を与える可能性があります。

2つのテーブルを接続するには、外部キーを使用します。これは、別のテーブルの一意のキーを参照する単なる識別子であり、通常はプライマリキーです。 次の例では、最初のテーブルに一意の識別子(id)を持つ3人の作成者に関する情報が含まれていることがわかります。 2番目の表では、この識別子を介して各記事エントリを著者に関連付けます。 これで、最初の記事の著者を見つけることができ、逆もまた同様です。トムは2つの記事を書いたことがわかります。1つはメアリー、もう1つはジェーンです。

これは、単純な1対1の関係モデルです。 1対多および多対多のモデルもあります。



データのグループ化と共有



フィールドに関しては、特定のデータをいつグループ化するか、いつグループ化しないかを知ることも重要です。 1つのフィールドにどの情報を含めるか、またはその逆を決定し、その一部を変更する必要があるかどうかを判断する良い方法は? たとえば、住所をそのコンポーネントに分解して保存する必要があります:1)通り、2)市、3)州、4)郵便番号、5)国?

サイトの機能に不可欠な部分ですか(ユーザーまたは管理者がアドレスまたは状態で他のユーザーを検索したい場合)、または単にディスク上のデータベースが占有するスペースを増やしますか? これがそれほど重要でない場合、1つの文字列フィールドだけを更新できるのに、5つのフィールドを変更するときにデータベースをロードする理由は何ですか。 より便利なオプションは、フィールドが区切られているHTMLフォームからこのデータを取得し、データベースにアドレスを追加する前に、対応するフィールドの値を1行に結合することです。

これはほんの一例ですが、サイトの機能を維持するために、テーブルフィールドを整理する最も効果的な方法、それらをいつ組み合わせるか、いつ別々に保つかについて常に考えています。



データベースの正規化



正規化は、情報のより効率的なストレージを整理するために設計された一連のガイドラインです。 最も一般的な標準形式で提供されるいくつかの重要な基本プラクティスについてはすでに述べました。 5つの標準形式があります。 これらの通常のフォームに精通し、要件に応じてデータベースを設計すると便利です。

データベースの正規化は大きなトピックですが、その基本を理解することは非常に役立ちます。 各正規形と正規化の一般的な概念を理解するために、データベースの正規化の基礎を必ずご覧ください



おわりに



データベースの設計は広範なトピックですが、基本を学び、正しいデータベース構造を理解するために多くのことをする必要はありません。 おそらく、データベースを設計する上で最も重要なステップは、その始まりとブレインストーミングです。 これにより、開発者は必要なすべての情報を事前に取得し、必要に応じて計画を実行できます。 設計に必要なすべての情報のみを持っているため、適切にリンクされたテーブルを持つ効果的なデータベースを作成できます。

データベースは効率的でスケーラブルでなければなりません。 データは絶えず編集、追加、削除されるため、この絶えず変化するデータセットをサポートするような方法でデータベースを整理しておくことが重要です。 作成したデータベースで削除する必要がある情報のみが複製されないようにし、他のデータを簡単かつ簡単に参照できるようにしてください。



追加のリソース





ps PMでの譲渡の申し立ては大歓迎です。 気にしなかったみんなに感謝します:)



All Articles