MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

第2正規形(2NF)とは?部分関数従属の排除を具体例で解説

第2正規形(2NF)とは?

データベース正規化における第2段階が「第2正規形(2NF:Second Normal Form)」です。

あるテーブルが2NFと呼ばれるためには、以下の条件をすべて満たす必要があります。

  • リレーションが第1正規形(1NF)のルールをすべて満たしていること
  • すべての非キー属性が主キーに対して完全関数従属していること

つまり、第2正規形は主キーへの部分関数従属を排除するための正規形です。

ここからは、具体的な例を使って2NFについて詳しく見ていきましょう。

例:2NFに違反するテーブル

<StudentProject>

StudentIDProjectIDStudentNameProjectName
S89P09OliviaGeo Location
S76P07JacobCluster Exploration
S56P03AvaIoT Devices
S92P05AlexandraCloud Deployment


上記のテーブルには部分関数従属が存在します。どのような問題があるのか、順を追って確認してみましょう。

部分関数従属のポイント

このテーブルのキー属性(プライム属性)は StudentIDProjectID の複合主キーです。

前述のとおり、非キー属性(非プライム属性)である StudentNameProjectName が候補キーの一部だけに従属している場合、その関係は「部分関数従属」とみなされます。

  • StudentNameStudentID だけで決定できる → 部分関数従属が発生
  • ProjectNameProjectID だけで決定できる → 部分関数従属が発生

したがって、<StudentProject> リレーションは正規化における2NFに違反しており、不良なデータベース設計と判断されます。このままではデータの重複や更新時の不整合といった問題が起こりやすくなります。

例:2NFへ変換したテーブル

部分関数従属による2NF違反を解消するには、元のテーブルを複数のテーブルに分解(デコンポーズ)します。

<StudentInfo>

StudentIDProjectIDStudentName
S89P09Olivia
S76P07Jacob
S56P03Ava
S92P05Alexandra


<ProjectInfo>

ProjectIDProjectName
P09Geo Location
P07Cluster Exploration
P03IoT Devices
P05Cloud Deployment


このようにテーブルを分割することで、各非キー属性が主キー全体に完全に依存する形になりました。これでリレーションはデータベース正規化における第2正規形(2NF)を満たしています。

  1. 第3正規形(3NF)とは?条件と変換例をわかりやすく解説

    第3正規形(3NF)とは?データベースの正規化における第三段階が第3正規形(3NF:Third Normal Form)です。テーブルが3NFであるためには、次の2つの条件を満たす必要があります。リレーションが第2正規形(2NF)であること推移的関数従属が存在しないこと推移的関数従属とは、「A → B」「B → C」という依存関係から、間接的に「A → C」が導かれてしまう状態を指します。このような依存関係が残っていると、データの冗長性や更新時の不整合が発生しやすくなります。例:3NFに違反するテーブル次の <MovieListing> テーブルを見てみましょう。Movie_IDL

  2. Djangoフォームウィジェットの使い方を徹底解説|Textareaで入力フォームをカスタマイズ

    Djangoのフォームウィジェットとは? この記事では、Djangoフォームにおける「ウィジェット(widget)」の使い方について詳しく解説します。ウィジェットを活用すると、フロントエンドの見た目や操作性を大きく向上させることができます。 ウィジェットとは、DjangoフォームからHTMLとしてレンダリングされる要素のことです。テキストボックス(input)、テキストエリア(textarea)、パスワード入力欄(password input)など、フォームを構成するUI部品はすべてウィジェットに該当します。 事前準備:プロジェクトとアプリの作成 まずはDjangoプロジェクトとアプリを作成