ここでは、正規化を素人の言葉で説明しようとしています。まず、リレーショナルデータベース(Oracle、Access、MySQL)に適用されるものなので、MySQLだけではありません。
正規化とは、各テーブルに最小限のフィールドのみがあることを確認し、依存関係を取り除くことです。従業員の記録があり、各従業員が部門に属しているとします。部門を従業員の他のデータと一緒にフィールドとして保存すると、問題が発生します。部門が削除されるとどうなりますか?すべての部門フィールドを更新する必要があり、エラーが発生する可能性があります。また、一部の従業員に部門がない場合はどうなりますか(新しく割り当てられた可能性がありますか?)。これでnull値になります。
したがって、正規化とは、簡単に言うと、nullになるフィールドを避け、テーブル内のすべてのフィールドが記述されているデータの1つのドメインにのみ属するようにすることです。たとえば、employeeテーブルでは、フィールドはid、name、social security numberである可能性がありますが、これら3つのフィールドは部門とは関係ありません。従業員IDのみが、従業員が属する部門を示します。つまり、これは、従業員が所属する部門を別のテーブルに配置する必要があることを意味します。
これが簡単な正規化プロセスです。
EMPLOYEE ( < employee_id >, name, social_security, department_name)
説明したように、これは正規化されていません。正規化された形式は次のようになります
EMPLOYEE ( < employee_id >, name, social_security)
ここで、Employeeテーブルは1セットのデータのみを担当します。では、従業員が所属する部門をどこに保存するのでしょうか。別の表で
EMPLOYEE_DEPARTMENT ( < employee_id >, department_name )
これは最適ではありません。部門名が変更された場合はどうなりますか? (それは常に米国政府で起こります)。したがって、これを行う方が良いです
EMPLOYEE_DEPARTMENT ( < employee_id >, department_id )
DEPARTMENT ( < department_id >, department_name )
第1正規形、第2正規形、第3正規形があります。しかし、DBコースを勉強しているのでない限り、私は通常、理解できる最も正規化された形式を選択します。
これがお役に立てば幸いです。