如何在缺少信息的情况下获得第三范式

问题描述

我正在开发一个表,该表将存储具有位置的对象。对象可以具有指定的州/地区(可选),并且它们始终具有指定的国家/地区。因此,简化的起点是:

enter image description here

现在,州(可以通过ISO代码唯一标识)和国家之间存在功能依赖关系,州决定了国家。这将建议我创建一个新表:State,它具有一个引用另一个表Country的Country_id。问题在于,在要放入数据库中的数据中,“状态”值可能会丢失,因此为NULL,因此我没有什么可放入中间表中。

在国家与国家之间的依存关系中是否存在NULL(由于缺少信息而导致)是否意味着无法在此处实现第三范式,并且我需要从对象表中分别引用州和国家(地区)表?或针对这种情况的最佳设计解决方案是什么?

编辑:这实际上是一个关于问题Functional dependencies in case of nulls的实际实现的问题,关于哪个设计解决方案将适用于id-state-country之间可能的传递函数依赖项可以包含状态的空值的情况

解决方法

我假设您的对象表包含州和国家/地区以外的其他信息,

您可以这样设计Object表:

Object
------
Object ID
State FK
Country FK

状态FK将为空。没有值表示没有状态。

您将有单独的State和Country表。这类表的另一个名称是 value表,因为SELECT WHERE ID =键返回一个值。

以下是“国家和地区”表。根据您的应用程序,确保州或地区位于该国家/地区。

Country
-------
Country ID
Country Name

State
-----
State ID
Country FK
State Name
,

这是一个相当棘手的问题。在实践中,通常可以通过使用单个地理表来解决这一问题,每行中都有不同的层次结构。

但是,这不是您的问题。您的问题是关于一个可选的中间尺寸。这确实给第三范式带来了问题。我认为规范的解决方案是引入伪造的“州”行,每个国家可能会有一个没有州的城市。

也就是说,层次结构固定为城市->州->国家。但是在某些情况下,“州”实际上是国家的代名词。