これは非常に基本的なデータベース設計/正規化の質問です。
Books
次の列を持つテーブルがあるとします。
isbn|title|author|status
、、、のstatus
いずれかになりますchecked out
(整数として格納されます)。available
overdue
lost
行を追加するときに、「実際には、ステータスがのときに、checked out
別のフィールドを保存したい」と判断しますdue_date
。このフィールドは、ステータスがチェックアウトされている書籍にのみ保存します。それ以外の意味はありません。
これを行うための標準的で正しい、標準的な方法は何ですか?
1つのアプローチは、列を追加しNULL
てステータスがそうでない場合に設定することですchecked out
が、これは私には悪い考えのように聞こえます(特に、ステータスがavailable
あり、ステータスがある場合はどうなりますdue_date
か?)
もう1つの明白な答えは、テーブルを作成してペアDueDates
を格納することです。これは私が通常採用しているアプローチですが、テーブルやsがいたるところにあるisbn|due_date
ことになりがちです。JOIN
私は本を具体的に保管する方法を探していません。それは問題の単なる例であり、標準的な解決策を知りたいです。
編集:ステータスのみ(、、、、 ...)のフィールドをたくさん追加し、ステータスがそうでないかのようにこれらすべてを追加したい場合、答えは変わりますか?checked out
due_date
borrowed_by
checked_out_from
NULL
checked out