这是一个非常基本的数据库设计/规范化问题。
假设我有一个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 out
due_date
borrowed_by
checked_out_from
NULL
checked out