Ree*_*eem -1 database null database-design relational-database database-normalization
我有两个表,“警察和违规”(警察拥有警察的数据,而“违规”则包含所有违规停车的数据),其基本思想是警察可以取消任何数量的违规行为,但只有一个违规行为可以被一次取消因此,从本质上讲,它可以看作是(警察PK(用户名))1:M(违规PK(违规#))现在,违规表会将警察的用户名作为外键。现在,如果其中一位警察取消了特定的违规行为,那么还将添加该警察的用户名(取消日期和时间),而不是此名称,在违规表中它将具有空值。
问题是,当在数据库中插入一个违反项时,违反表中属于该策略的字段为NULL,而我希望避免使用此NULL值。[我的意思是,(用户名,日期,时间)只有在警察取消违规行为时才有价值,这意味着将违规状态更新为要取消。]
警察可以取消许多违规行为,但一个警察取消了一项违规行为,因此,它是(警察PK(用户名))1:M(违反PK(违反#))。
不,它是M的0或1。
因此,违规表将警察的用户名设为FK。
仅当您要允许使用NULL作为用户名时。
如果您不这样做,则可以为已取消的违规创建单独的表。
police(username, ...)
violation(violation#, ...)
cancelled(violation#, username, ...)
Run Code Online (Sandbox Code Playgroud)
您永远不需要使用可为空的列。只需确定您想对应用程序/业务状况说些什么,就可以对它们进行全面描述。
是时候阅读有关信息建模,关系模型和数据库设计的书了。