这是一个非常基本的数据库设计/规范化问题。
假设我有一个Books包含以下列的表格:
isbn|title|author|status
并且status可以是checked out, available, overdue,之一lost(存储为整数)。
添加行时,我决定“实际上,当状态为 时checked out,我想存储另一个字段due_date”。我只想将此字段存储为状态为已签出的书籍,否则它没有任何意义。
执行此操作的标准、正确、规范的方法是什么?
一种方法是添加列并将其设置为NULL如果状态不是checked out,但这对我来说听起来是个坏主意(为了完整性,例如,如果状态是available并且我们也有一个due_date?)
另一个明显的答案是创建一个DueDates表并isbn|due_date在其中存储对。这是我通常采用的方法,但很容易最终JOIN得到到处都是桌子和 s。
我不是在寻找如何专门存储书籍,这只是问题的一个例子,我想知道标准解决方案。
编辑:如果我决定只为状态添加许多字段( 、、、 ...) ,答案是否会改变- 并且所有这些都好像状态不是?checked outdue_dateborrowed_bychecked_out_fromNULLchecked out
