SQLで正規化を実装する方法は?
導入
散らかったガレージを、すべてが簡単にアクセスできるようにしてきれいに配置できる、よく組織された明るい照明のスペースに変えることを想像してください。データベースの世界では、このプロセスは正規化と呼ばれます。きちんとしたガレージが効率を向上させると、編成されたデータを備えた適切に構造化されたデータベースのパフォーマンスが向上します。もっと学ぶ準備はできましたか?この記事では、実用的なSQLの例を使用して、最初の3つの通常の形式(1NF、2NF、3NF)を説明します。データベースの設計エクスペリエンスに関係なく、より効率的でスケーラブルなデータベースを構築する方法を学びます。データを最適化する準備はできましたか?始めましょう!
概要
- SQLを使用して、データベース正規化のコア原則と目標を把握します。
- 最初の通常のフォーム(1NF)を適用して、原子値と一次キーを確保します。
- 部分的な依存関係を特定して排除して、2番目の通常のフォーム(2NF)を達成します。
- 3番目の通常のフォーム(3NF)の要件を満たすために、推移的依存関係を削除します。
- 実用的なSQLクエリを使用して正規化されたデータベース構造を実装します。
目次
- 導入
- 正規化とは何ですか?
- 最初の通常のフォーム(1NF)
- 2番目の通常のフォーム(2NF)
- 3番目の通常のフォーム(3NF)
- 実用的な例:それをすべてまとめる
- 結論
- よくある質問
正規化とは何ですか?
正規化は、リレーショナルデータベース設計の重要な側面です。冗長性を最小限に抑え、データの整合性を高めることにより、データ組織を合理化します。このプロセスでは、データベースを複数のテーブルに分割し、確立されたルールに基づいてそれらの間の関係を定義し、それによりデータの異常を削減します。各通常の形式を詳細に調べて、原則の概要を説明し、実用的なSQLの例で説明しましょう。
最初の通常のフォーム(1NF)
目的:各テーブルに主キーがあり、すべての列にアトミック(不可分)値が含まれていることを確認します。これらのルールを順守する場合、テーブルは1NFを満たします。
- 原子値:各列は、行ごとに1つの値のみを保持する必要があります。
- 一意の列名:各列には一意の識別子が必要です。
- 独立順:データストレージの順序は無関係です。
例:
繰り返しグループを持つ非正規化されたテーブルを検討してください。
Orderid | カスタム名 | 製品 | 数量 |
---|---|---|---|
1 | ジョン・ドー | ペン、鉛筆 | 2、3 |
2 | ジェーン・スミス | ノートブック、消しゴム | 1、2 |
Products
とQuantities
列には複数の値が含まれているため、このテーブルは1NFに違反します。
1NFへの変換:
Orderid | カスタム名 | 製品 | 量 |
---|---|---|---|
1 | ジョン・ドー | ペン | 2 |
1 | ジョン・ドー | 鉛筆 | 3 |
2 | ジェーン・スミス | ノート | 1 |
2 | ジェーン・スミス | 消しゴム | 2 |
SQL実装:
テーブル注文を作成します( OrderId int、 CustomerName varchar(255)、 Product varchar(255)、 数量int、 主キー(OrderID、製品) );
2番目の通常のフォーム(2NF)
目的:テーブルが1NFにあることを確認し、すべての非キー属性が主キー全体に完全に依存していることを確認します。これは、複合プライマリキーを備えたテーブルに特に関連しています。
2NFを達成するための手順:
- 1NFコンプライアンス:テーブルはすでに1NFに適合する必要があります。
- 部分的な依存関係を排除する:非キー属性が、その一部だけでなく、完全なプライマリキーに依存することを確認してください。
例:
1NFのテーブルを検討しますが、部分的な依存関係を示します。
Orderid | customerid | ProductId | 量 | カスタム名 |
---|---|---|---|---|
1 | 1 | 1 | 2 | ジョン・ドー |
2 | 2 | 2 | 1 | ジェーン・スミス |
ここでは、 CustomerName
CustomerID
のみに依存し、Compositeキー( OrderID
、 ProductID
)ではありません。
2NFへの変換:
-
Orders
とCustomers
ための個別のテーブルを作成します。
注文表:
Orderid | customerid | ProductId | 量 |
---|---|---|---|
1 | 1 | 1 | 2 |
2 | 2 | 2 | 1 |
顧客テーブル:
customerid | カスタム名 |
---|---|
1 | ジョン・ドー |
2 | ジェーン・スミス |
SQL実装:
テーブル注文を作成します( OrderId int、 customerid int、 Productid int、 数量int、 主キー(OrderID、ProductID) ); テーブルの顧客を作成します( customerId intプライマリキー、 CustomerName varchar(255) );
3番目の通常のフォーム(3NF)
目的:テーブルが2NFにあることを確認し、すべての属性が主キーのみに依存します。
3NFを達成するための手順:
- 2NFコンプライアンス:テーブルはすでに2NF要件を満たしている必要があります。
- 推移的依存関係を削除します:非キー属性が他の非キー属性に依存しないことを確認してください。
例:
2NFのテーブルを検討しますが、推移的な依存関係を備えています。
Orderid | customerid | ProductId | 量 | ProductName |
---|---|---|---|---|
1 | 1 | 1 | 2 | ペン |
2 | 2 | 2 | 1 | ノート |
ここでは、 ProductName
ProductID
に依存し、 OrderID
に直接依存します。
3NFへの変換:
-
Orders
とProducts
の個別のテーブルを作成します。
注文表:
Orderid | customerid | ProductId | 量 |
---|---|---|---|
1 | 1 | 1 | 2 |
2 | 2 | 2 | 1 |
製品テーブル:
ProductId | ProductName |
---|---|
1 | ペン |
2 | ノート |
SQL実装:
テーブル注文を作成します( OrderId int、 customerid int、 Productid int、 数量int、 主キー(OrderID、ProductID) ); テーブルの顧客を作成します( customerId intプライマリキー、 CustomerName varchar(255) ); テーブル製品を作成します( Productid intプライマリキー、 ProductNameVarchar(255) );
実用的な例:それをすべてまとめる
この非正規化されたデータから始めましょう。
Orderid | カスタム名 | 製品 | 数量 |
---|---|---|---|
1 | ジョン・ドー | ペン、鉛筆 | 2、3 |
2 | ジェーン・スミス | ノートブック、消しゴム | 1、2 |
ステップ1:1NFに変換します
多値の列を原子値に分離します。
Orderid | カスタム名 | 製品 | 量 |
---|---|---|---|
1 | ジョン・ドー | ペン | 2 |
1 | ジョン・ドー | 鉛筆 | 3 |
2 | ジェーン・スミス | ノート | 1 |
2 | ジェーン・スミス | 消しゴム | 2 |
ステップ2:2NFに変換します
部分的な依存関係を特定して分離します。
- 注文表:
Orderid | customerid | ProductId | 量 |
---|---|---|---|
1 | 1 | 1 | 2 |
1 | 1 | 2 | 3 |
2 | 2 | 3 | 1 |
2 | 2 | 4 | 2 |
- 顧客テーブル:
customerid | カスタム名 |
---|---|
1 | ジョン・ドー |
2 | ジェーン・スミス |
- 製品テーブル:
ProductId | ProductName |
---|---|
1 | ペン |
2 | 鉛筆 |
3 | ノート |
4 | 消しゴム |
ステップ3:3NFに変換します
推移的依存関係を排除し、一次キーのみの直接依存関係を確保する:
- ステップ2の表は、すべての非キー属性がプライマリキーのみに依存するため、すでに3NFを満たしています。
結論
この記事では、SQL正規化の実装方法を示しました。 SQL正規化のマスタリングは、堅牢で効率的なデータベースを構築するために重要です。最初の3つの通常のフォーム(1NF、2NF、および3NF)の原則を理解して適用することにより、冗長性を大幅に減らし、データの整合性を高めることができます。これにより、データ管理が簡素化されるだけでなく、データベース全体のパフォーマンスが向上します。これらの実用的なSQLの例を使用すると、複雑で組織化されたデータセットを効率的で適切に構造化したデータベースに変換できます。これらの手法を実装して、データベースが安定し、スケーラブルで、簡単に保守可能であることを確認します。
よくある質問
Q1。データベースの正規化とは何ですか?
A.データベースの正規化は、データの冗長性を減らし、データの整合性を向上させるために、一連のいわゆる正常形式に従ってリレーショナルデータベースを構築するプロセスです。
Q2。なぜ正規化が重要なのですか?
A.正規化により、データの複製が最小限に抑えられ、データの一貫性が確保され、データベースのメンテナンスが簡素化されます。
Q3。通常のフォームは何ですか?
A.通常のフォームは、正規化プロセスの段階を表します:1NF(最初の通常の形式)、2NF(2番目の通常の形式)、および3NF(3番目の正常形式)など。
以上がSQLで正規化を実装する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











この記事では、トップAIアートジェネレーターをレビューし、その機能、創造的なプロジェクトへの適合性、価値について説明します。 Midjourneyを専門家にとって最高の価値として強調し、高品質でカスタマイズ可能なアートにDall-E 2を推奨しています。

メタのラマ3.2:マルチモーダルとモバイルAIの前進 メタは最近、ラマ3.2を発表しました。これは、モバイルデバイス向けに最適化された強力なビジョン機能と軽量テキストモデルを特徴とするAIの大幅な進歩です。 成功に基づいてo

この記事では、ChatGpt、Gemini、ClaudeなどのトップAIチャットボットを比較し、自然言語の処理と信頼性における独自の機能、カスタマイズオプション、パフォーマンスに焦点を当てています。

この記事では、Grammarly、Jasper、Copy.ai、Writesonic、RytrなどのトップAIライティングアシスタントについて説明し、コンテンツ作成のためのユニークな機能に焦点を当てています。 JasperがSEOの最適化に優れているのに対し、AIツールはトーンの維持に役立つと主張します

Shopify CEOのTobiLütkeの最近のメモは、AIの能力がすべての従業員にとって基本的な期待であると大胆に宣言し、会社内の重大な文化的変化を示しています。 これはつかの間の傾向ではありません。これは、pに統合された新しい運用パラダイムです

今週のAIの風景:進歩、倫理的考慮、規制の議論の旋風。 Openai、Google、Meta、Microsoftのような主要なプレーヤーは、画期的な新しいモデルからLEの重要な変化まで、アップデートの急流を解き放ちました

ねえ、忍者をコーディング!その日はどのようなコーディング関連のタスクを計画していますか?このブログにさらに飛び込む前に、コーディング関連のすべての問題について考えてほしいです。 終わり? - &#8217を見てみましょう

この記事では、Google Cloud、Amazon Polly、Microsoft Azure、IBM Watson、DecriptなどのトップAI音声ジェネレーターをレビューし、機能、音声品質、さまざまなニーズへの適合性に焦点を当てています。
