【问题标题】:How to achieve 3rd normal form with missing information如何在缺少信息的情况下实现第三范式
【发布时间】:2020-12-26 14:54:29
【问题描述】:

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

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

在州-国家/地区之间的依赖关系中存在 NULL(由于缺少信息)是否意味着此处无法实现第三种范式,我需要将州和国家/地区表与对象表分开引用?或者这种情况下最好的设计方案是什么?

编辑:这确实是关于Functional dependencies in case of nulls 问题的实际实现的问题,关于在 id-state-country 之间可能的传递函数依赖可以包含 state 的 null 值的情况下,哪种设计解决方案适合。

【问题讨论】:

  • 您的第一个问题是什么?是什么阻止您确定设计的 NF 或规范化到给定的 NF?你被困在哪里了?否则这只是要求我们重写教科书或问答。
  • 为什么不同国家的2个州不能同名?--为什么你认为国家决定国家?即使两个州不能有相同的名字,如果两个 id 可以有相同的国家但 null 国家,国家不能确定国家,那你为什么这么说呢?如果您不想使用空值并且“没有任何东西可以放入该表”,那么是什么阻止您拥有另一个表?您似乎没有正确使用术语或遵循设计方法。
  • 一个州可以通过一个 ISO 代码来识别,这使得它们可以唯一地确定一个国家,所以它们可以有相同的名称是没有问题的(只要没有一个州跨越一个以上的国家.. .).
  • use text, not images/links, for text--including tables & ERDs.。仅将图像用于无法表达为文本或扩充文本的内容。

标签: sql database-design database-normalization


【解决方案1】:

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

你可以这样设计对象表:

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

State FK 可以为空。没有值就没有状态。

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

这里是国家和州表。由您的申请来确保州或地区位于该国家/地区。

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

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

【讨论】:

    【解决方案2】:

    这是一个相当棘手的问题。在实践中,它通常通过在每行中显示不同层次结构的单个地理表来解决。

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

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

    【讨论】:

    • 谢谢。你的意思是说,在实践中,大多数数据库设计人员会忽略中间维度,而只是创建一个包含州和国家列的 Geography 表?
    • @eli6 。 . .在实践中,这经常被使用——带有指向适当参考表的外键链接的单个详细地理记录。地理可能很复杂。例如,我现在坐的地方,这个城市由 5 个县组成。通常,县比美国的城市大。但也有其他解决方案。
    猜你喜欢
    • 2019-06-07
    • 1970-01-01
    • 2014-03-05
    • 1970-01-01
    • 2016-10-12
    • 2020-09-17
    • 1970-01-01
    • 2014-07-20
    • 1970-01-01
    相关资源
    最近更新 更多