私は現在、システム分析のクラスに参加しています。正規化の使用法をよりよく理解したいと思っています。学生ID、名前、電話番号、および専攻を含むテーブルで作業していた場合の3NFの場合。学生の名前と電話番号の両方が ID でわかるので、学生 ID と専攻だけを使用する必要があります。私はこれを正しく理解していますか?
1 に答える
これで始めましょう。. .
student_id name phone major
--
1 Darcy Sailer 000-111-2345 Mathematics
2 Lonnie Seman 000-111-3456 Fine Art
3 Mathew Bradburn 000-112-9086 Education
4 Edwina Loflin 000-111-2345 Psychology
5 Clinton Rosebrook 000-111-1000 Chemistry
6 Lonnie Seman 000-113-2975 Chemistry
唯一の候補キーは、student_id です。つまり、名前は一意ではなく、電話番号も一意ではなく、専攻も一意ではありません。
テーブルが 3NF になるためには、これらの要件を満たす必要があります。
- 2NFです。
- すべての非プライム属性は、すべての候補キーに直接依存しています。(推移的な依存関係はありません。)
このテーブルは 2NF です。(証明は読者に委ねます。) 非素数属性が 3 つあります。すべてが唯一の候補キーに直接依存しています。つまり、
- 名前は電話番号を決定しません。
- 名前はメジャーを決定しません。
- 電話はメジャーを決定しません。
- 電話は名前を決定しません。
- メジャーは名前を決定しません。
- メジャーは電話を決定しません。
つまり3NFです。
2 つの列の間の依存関係を識別する際に、次の質問に答えようとしています。
たとえば、「name」と「major」の間に依存関係があるかどうかを判断するには、「'name' の値が 1 つ与えられた場合、'major' の値は常に 1 つしか見つからないのですか?」と尋ねます。そして答えは「いいえ」です。「ロニー・セマン」という名前を考えると、美術と化学という 2 つの専攻があります。
現実の世界では、1 人が複数の電話番号と複数の専攻を持っていてもかまいません。1 人につき 1 つの電話番号のみを記録するか、1 人につき 1 つの主要な番号のみを記録するかを選択することは、データベース設計の重要な部分ですが、正規化とは関係ありません。
現実の世界では、代表的なサンプル データから始めることはほとんどありません。データベース設計者は、次のようなことを知っていることが期待されています
- 2 人が同じ名前を持つことができます。
- 2 人が同じ電話番号を持つことができます。
- 2 人が同じ専攻を持つことができます。
- 1 人で 2 つ以上の電話番号を持つことができます。
- 1 人で 2 つの専攻を持つことができます。