4

私が所有し、読んだ本を含むデータベースを作成しています。私が所有して読んでいる本 (または「タイトル」) と、私が所有して読んでいるその本の版 (または「冊子体の紙」) の両方を追跡したいと考えています。

Book と Edition は多対多です。私は『Democracy in America』という本の複数の版を所有しています。私はまた、「誰がために鐘は鳴る」というものを含む、いくつかの本 (または「タイトル」) を含む「ヘミングウェイ」という版を所有しています。

したがって、本と版の間の架け橋が必要です。私のテーブルは次のとおりです。

Book (book_pk*,title)
Edition (edition_pk*,ISBN,year)
Book_Edition (book_fk,edition_fk)

Book_Edition テーブルには複合主キーが含まれているというのは正しいと思います。

今、私は Read テーブルに取り組んでいます。このテーブルには、私が読んだ本と、それらを読んだ日付が含まれます。これまでの読み取りテーブルには次のものが含まれています。

読み取り (read_pk,date,note)

ただし、Read テーブルを自分の書籍やエディションに関連付ける必要があります。この場合、book_fk と edition_fk は推移的に依存しているように見えます。では、どうすれば第 3 正規形に準拠できるのでしょうか。

オプション 1:
Read テーブルを次のように変更します: Read (read_pk,date,note,book_fk,edition_fk)

オプション 2:
Book_Edition テーブルを次のように変更します: Book_Edition (book_edition_pk,book_fk,edition_fk)
Read テーブルを次のように変更します: Read (read_pk,date,note,book_edition_fk)

オプション 3: ???

任意の洞察をいただければ幸いです。これが他の場所で扱われている場合はお詫び申し上げます。有望に見えるいくつかの投稿を見ましたが、相対的なn00bとして、それらを解読して自分の状況に適用することができませんでした.


sqlvogel ごとに編集:
依存関係の特定を試してみましょう。つまり、フィールド A が変更された場合にフィールド B が変更される必要がある、または変更される可能性がある場所を特定しようとしています。本 (「タイトル」と「綴じられた紙のコレクション」の両方) は本質的に永久的なものであるため、これは難しいと思います。タイトル、ISBN、または年のフィールドを編集する唯一の機会は、データ入力エラーがある場合です。特定の edition_pk の ISBN が間違って入力されている場合、同じ edition_pk の年も間違って入力されている可能性がわずかに高くなりますが、それは依存関係ですか?

読み取りテーブルに関しては、状況は似ていると思います。本を読むたびにレコードが作成され、理論的には編集されることはありません。特定の日に読まれた本と版を特定したい。データ入力エラーがある場合、1 つまたは複数のフィールドに影響する可能性があります。特に、間違った book_fk が入力された場合は、間違った edition_fk も入力された可能性が高くなります。繰り返しますが、それは私が心配すべき依存関係ですか?

依存関係について考えるときに他に考慮すべきことはありますか?

4

2 に答える 2