私は次のSTUDENT
関係を第1正規形で持っています。ここでid
は主キーとして識別されています(ここでemail
もすべてのタプルに対して一意です):
STUDENT(id, email, first_name, last_name)
この関係/テーブルを第3正規形(3NF)になるように正規化したい。
上記のSTUDENT
関係/テーブルから特定できた依存関係は次のとおりです
フル:
{ id } → { email }
推移的:
{ email } → { first_name, last_name }
これが私が混乱している部分です。主キー(email
)で識別できるため、id
は推移的な依存関係として識別しました。属性/列email
自体がfirst_name
を識別および決定できますおよびlast_name
。
...このアイデアを続けようとすると、最終的には次のような3NFになります。
STUDENT(id, email)
STUDENT_INFO(email, first_name, last_name)
ただし、ここでのSTUDENT
関係/テーブルは非常に冗長に思われます、別の関係/テーブルを指すだけです。ここでの正規化プロセスは正しいですか?または、依存関係が間違っていましたか?最初のリレーション/テーブルに2つの候補キーがあり、どちらも主キーである可能性がある場合は常に、この問題が発生するようです(id
またはemail
は、各行を一意に識別できます)。
ここが本質的に私が間違ったところです:
推移的な依存関係について重要なことは、次の2つの重要な要素です。
私の例では、私は以下を推移的な依存関係として識別しました:
_{ email } → { first_name, last_name }
_
ただし、email
は候補キーであるため、これは当てはまりません。代わりに、id
を主キーとして使用すると、完全な依存:
_{ id } → { email, first_name, last_name }
_