规范化数据库中 table 的空值
Normalize a null value of table in database
我有两个table,Police和Violations[Police持有警察的数据,而Violations包含所有违章停车的数据],其基本思想是警察可以取消任意数量的Violations 但实际上只有一个 Violations 被一个 police.So 取消了,它可以被看作是
(police PK(username)) 1:M (Violations PK(Violations#))
现在,Violations table 会将警察的用户名作为外键。现在,如果其中一名警察取消了特定的违规行为,那么该警察的用户名、取消日期和时间也将被添加,而不是它在违规行为中具有空值 table.
问题是当一个 Violation 插入数据库时,Violations table 中属于那个警察的字段是 NULL,我希望避免这个 NULL 值。
[我的意思是,(用户名、日期、时间)只有在警察取消违规时才有价值,这意味着更新违规状态以取消。 ]
如果您不想在 "cancelling police officer" FK 列中出现空值,即使违规 未 被取消,您也必须 link 给官员。
唯一的解决办法是有一个特殊的假警官来指示"not cancelled",也许是一个用户名和个人资料为空的人。
想要避免空值是一个糟糕的设计选择。正确、最简单、最清晰和普遍接受的处理方式是在未取消违规时在 FK 列中放置一个空值。
the police can cancel many violations but one violation canceled by one police so, it is (police PK(username)) 1: M (violation PK(violation#)).
不是,是0-1到M。
So, violation table will have the username of the police as FK.
仅当您希望允许 NULL 作为用户名时。
如果不这样做,您可以单独 table 取消违规。
police(username, ...)
violation(violation#, ...)
cancelled(violation#, username, ...)
您永远不需要使用可为空的列。只需确定您想对您的 application/business 情况说些什么,这些情况将共同完整地描述它们。
是时候读一本关于信息建模、关系模型和数据库设计的书了。
Re normalizing given nulls.
听起来好像你在谈论一种可选关系(0 或 1 到 M)。 FK 中的 NULL 是指示关系不存在的相当标准的方式。
在这种情况下,这意味着没有取消警察,因为违规行为没有被取消。正确的?
我不明白为什么 null 在这里是个问题。
但是,如果您想在这里摆脱 NULLS,有一种相当简单的方法可以做到。只需创建关系 table,其中包含与您的两个 table 的 FK。并从违规 table 中删除 FK。现在,不要在任何地方使用 NULL,只要不在关系 table 中插入一行即可!稍后,当确实发生取消时,只需在 relatonshp table.
中插入一个新行
我有两个table,Police和Violations[Police持有警察的数据,而Violations包含所有违章停车的数据],其基本思想是警察可以取消任意数量的Violations 但实际上只有一个 Violations 被一个 police.So 取消了,它可以被看作是 (police PK(username)) 1:M (Violations PK(Violations#)) 现在,Violations table 会将警察的用户名作为外键。现在,如果其中一名警察取消了特定的违规行为,那么该警察的用户名、取消日期和时间也将被添加,而不是它在违规行为中具有空值 table.
问题是当一个 Violation 插入数据库时,Violations table 中属于那个警察的字段是 NULL,我希望避免这个 NULL 值。 [我的意思是,(用户名、日期、时间)只有在警察取消违规时才有价值,这意味着更新违规状态以取消。 ]
如果您不想在 "cancelling police officer" FK 列中出现空值,即使违规 未 被取消,您也必须 link 给官员。
唯一的解决办法是有一个特殊的假警官来指示"not cancelled",也许是一个用户名和个人资料为空的人。
想要避免空值是一个糟糕的设计选择。正确、最简单、最清晰和普遍接受的处理方式是在未取消违规时在 FK 列中放置一个空值。
the police can cancel many violations but one violation canceled by one police so, it is (police PK(username)) 1: M (violation PK(violation#)).
不是,是0-1到M。
So, violation table will have the username of the police as FK.
仅当您希望允许 NULL 作为用户名时。
如果不这样做,您可以单独 table 取消违规。
police(username, ...)
violation(violation#, ...)
cancelled(violation#, username, ...)
您永远不需要使用可为空的列。只需确定您想对您的 application/business 情况说些什么,这些情况将共同完整地描述它们。
是时候读一本关于信息建模、关系模型和数据库设计的书了。
Re normalizing given nulls.
听起来好像你在谈论一种可选关系(0 或 1 到 M)。 FK 中的 NULL 是指示关系不存在的相当标准的方式。
在这种情况下,这意味着没有取消警察,因为违规行为没有被取消。正确的?
我不明白为什么 null 在这里是个问题。
但是,如果您想在这里摆脱 NULLS,有一种相当简单的方法可以做到。只需创建关系 table,其中包含与您的两个 table 的 FK。并从违规 table 中删除 FK。现在,不要在任何地方使用 NULL,只要不在关系 table 中插入一行即可!稍后,当确实发生取消时,只需在 relatonshp table.
中插入一个新行