OK、2つのテーブルがあります。主キーbook_idとtitleという別のフィールドを持つブックテーブル。また、主キーauthor_idとフィールドfirst_name、last_nameおよび外部キーbook_idを持つ作成者テーブル。
私のデザインは2NFに準拠していますか?
OK、2つのテーブルがあります。主キーbook_idとtitleという別のフィールドを持つブックテーブル。また、主キーauthor_idとフィールドfirst_name、last_nameおよび外部キーbook_idを持つ作成者テーブル。
私のデザインは2NFに準拠していますか?
一般的に(そして素人の言葉で)、レベル1での正規化は次のことを意味します。
2NFの場合、すべての列がキー全体に依存するという追加の制約があります(直接または別の非キー列を介して間接的に)。
したがって、この場合は1NFの基準を満たし、本は著者に依存するため、2NFに準拠していると言えます。
ただし、特に原則として常に3NFから開始する必要があるため、必ずしも優れた設計であるとは限りません。より良い解決策は本格的なものです:
books:
book_id
title
authors:
author_id
name
books_and_authors:
book_id
author_id
そうすれば、本と著者の間に多対多(ゼロを含む)の関係ができます。
テーブルが2NFにあるのは、それが1NFにあり、非プライム属性がテーブルの候補キーの適切なサブセットに依存していない場合のみです(ウィキペディアから)。
私はあなたのテーブルが1NFにあると仮定しなければなりません。
候補(およびプライマリ)キーはbook_idとauthor_idです。
非プライム属性は、title、first_name、last_nameです。これらの属性はいずれも、候補キーの適切なサブセットに依存しません(サブセットがないため、簡単に実現できます)。この設計の唯一の問題は、外部キーbook_idによってbook-authorが1:1の関係になることです(つまり、1冊の本->1人の著者。1人の著者->1冊の本)。これは、 book_idとauthor_idを保持する新しいテーブルで簡単に修正できます。
1NF(ウィキペディアも):
これが、リレーショナルデータベースを構築するために使用される方法です。