banner
veritas

veritas

github

1NF、2NF、または3NFを迅速に判断する方法

題外話#

この種の問題は、候補キーの組み合わせの判断方法に伴うことが一般的ですので、本記事では、まず范式を区別する方法を紹介する前に、候補キーを特定する方法を紹介します。

候補キーの求法:依存集に基づいて、右側に一度も現れたことのない属性を見つけると、それは必ず候補キーの一つです。その属性を基に、依存集に従って順次拡張し、すべての属性を遍歴できるかどうかを確認し、遍歴できないものを候補キーに追加します。

次に、范式を区別する方法について議論を続けます。

関連概念及びケース解析#

  • 1NF: 列の原子性を強調します。つまり、列は他のいくつかの列に分割できません。
    例えば:下の図では、図書は図書番号と書名に分解でき、この時は1NFには該当しません。
    image

  • 2NF: 1. 第一范式を満たすこと 2. 各非主属性は候補キーまたは主キー(主コード)に完全に関数依存している必要があります。
    PS:複合フィールドが主キーの場合にのみ、2NFを満たさない状況が発生する可能性があります。
    例えば:
    下の図では、前述の方法に基づいて、この関係モデルの候補キーがEMであることを判断でき、関数依存集にはM→Lが存在し、EMから直接導出されるものではないため、部分的な関数依存が存在し、2NFには該当しません。
    image

  • 3NF: 1. まず第二范式を満たすこと 2. 非主属性間に関数依存が存在しない(または伝播依存が存在しない)。
    つまり、この時主属性はAで、A→B、A→Dがあり、この時B→Cのような状況は発生してはいけません。

  • BCNF: 1. 前のすべての低級范式の要件を満たすこと 2. 主コード(主キー)間に依存が存在しない。
    例えば:
    image

まとめ#

范式

作用

特徴

1NF:

原子性を満たし、フィールドは分割できません。

フィールドはすべて単一属性です。

2NF:

完全依存を満たし、部分的な関数依存を排除します(列は混在して使用できません)。

一意の主キーを使用することが求められます。

3NF:

非主属性の伝播依存を排除します。

非主属性間に関数依存が存在してはいけません。

BCNF:

主属性の伝播依存を排除します。

主コード(主キー)間に依存が存在しません。

すべてのリレーショナルデータベースのテーブルは、第一范式を満たしています。第一范式は、本質的にリレーショナルデータベースに対する制約です。

第二、第三范式は、データベーステーブルの合理的な設計に対する要求が多く、第二、第三范式を理解することで、データベーステーブルの設計をより良く支援できます。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。