ヒント|設計|データ|データベース|データベース設計
動的な Web サイトの設計において、データベース設計の重要性は自明のことです。適切に設計されていない場合、クエリが非常に困難になり、プログラムのパフォーマンスにも影響します。 mySQL データベースと Oracle データベースのどちらを使用しているかに関係なく、形式化されたテーブル設計により、PHP コードが読みやすく拡張しやすくなり、アプリケーションのパフォーマンスも向上します。
正則化とは、簡単に言えば、テーブル設計における冗長性や不整合な従属を排除することです。この記事では、設計において知っておくべき形式化テクニックを学ぶ 5 つの段階的なプロセスについて説明します。したがって、実現可能で
効率的なデータベースが確立されます。この記事では、悪用される可能性のある関係の種類についても詳しく分析します。
ここでは、ユーザーの名前、会社、会社の住所、およびいくつかの個人的なお気に入りまたは URL を保存するユーザー情報テーブルを作成したいと仮定します。最初に、次のようなテーブル構造を定義します。
ゼロステータス フォーム
ユーザー
name company company_address url1 url2
Joe ABC 1 Work Lane abc.com xyz.com
Jill XYZ 1 Job Street abc .com xyz.com
正規化が実行されないため、この形式のテーブルをゼロ状態形式テーブルと呼びます。 url1 フィールドと url2 フィールドに注意してください --- アプリケーションで 3 番目の URL が必要な場合はどうすればよいでしょうか?この方法では、テーブルに追加の列を追加する必要がありますが、これは明らかに良いアイデアではありません。スケーラブルな
システムを作成したい場合は、最初の正規化形式の使用を検討し、それをテーブルに適用する必要があります。
正規化形式の第1レベル
1. 各テーブル内の重複グループを削除します
2. 関連データのセットごとに独立したテーブルを作成します
3. 主キーを使用して関連データの各セットを識別します
上の表は明らかに上記の最初のルールに違反しています。では、3 番目のルールの主キーは何を意味するのでしょうか?非常に簡単で、自動的に増加する一意の整数値を各レコードに追加するだけです。この値により、同じ名前を持つ 2 つのレコードを区別できます。最初のレベルの正規化を適用すると、次のテーブルが得られます: users
userId name company company_address url 1 Joe ABC 1 Work Lane abc.com 1 Joe ABC 1 Work Lane xyz.com
2 Jill ですが、この処理により次のような結果が得られます。新たな問題。ユーザー テーブルにレコードを挿入するたびに、すべての会社データとユーザー データを繰り返す必要があります。これにより、データベースが以前よりも大きくなるだけでなく、エラーが発生しやすくなります。したがって、まだ第 2 レベルの形式化を行う必要があります。