【问题标题】:How can this report (table) be normalized?这个报告(表格)如何规范化?
【发布时间】:2012-03-21 02:07:35
【问题描述】:

快速背景故事...我接受过一些数据库设计和管理方面的培训。在我的各种职位和职业生涯中,我曾小规模地使用过它们。我最近获得了 CMIS 的学士学位,数据库是其中的一部分。我了解关系数据库背后的理论,它们是如何工作的,以及最终如何构建它们。我只是没有足够的练习来精通。

我的老板今天决定,他希望我将我们从合作伙伴公司获得的所有报告放入数据库中。对我来说,这似乎是一项艰巨的任务,因为有不少于 30 份报告,其中许多都有大量数据。我们以 excel 格式获取它们。

我了解规范化,但仅在理论上且仅在小范围内(例如似乎永远存在的典型学生、教师、班级类型的场景)。我在这里看着大尺度,有点头晕目眩。

这里是一份较小报告的链接。它已经在 1NF 中(而且它是这样来的,所以那里没有大问题)。我想看一个例子,说明这看起来像归一化到 3NF 的样子,这可能有助于激发其他报告的灵感。

现在,我感到困惑的是,这些报告实际上都不依赖于其他报告。但是,其中散布着大量重复的数据。这意味着它们都有技术编号和技术名称,以及工单编号。尽管技术编号和名称是有限且重复的,但工单编号可能相同,也可能不同,如果这有意义的话。

我知道有一个只包含技术信息的表格是有意义的。然后仅使用数字关联报告并从任何报告中取出技术名称。我还有很多问题,但暂时先讲到这里。

顺便说一句,在有人说“将数据像那样放在网络上是愚蠢的”之前,这已被修改,因此它不是正确的数据,并且基本上没有用。

https://docs.google.com/spreadsheet/ccc?key=0ApvRcXXd6PiWdHFLRWVmNS1VUklpYkFvWVdKQmpvdWc

【问题讨论】:

  • 长问题(太多不重要的信息),没有代码,没有结构示例。 :-/ 请让它更具可读性。
  • 识别模型中的实体。与您要存储的信息相关的名词。
  • 鉴于您有多个区域,是否可以一个工单号识别两个完全不同的工单?例如,几个不同的区域是否可以有不同的工单编号为 3?

标签: mysql normalization


【解决方案1】:

通过 BCNF 进行规范化是基于键和功能依赖关系。您发布的数据中确实没有足够的信息来标准化为 3NF。

例如,region、rsp 和 office 只有一个值。因此,在您的示例数据中,所有其他列将为 region、rsp 和 office 确定一个且只有一个值。

tech_code->region
tech_name->region
dish_week_end_date->region
last_change_date->region
...
tech_code->rsp
tech_name->rsp
dish_week_end_date->rsp
last_change_date->rsp
...
tech_code->office
tech_name->office
dish_week_end_date->office
last_change_date->office

现在,即使 last_change_date 为 office 确定了一个且只有一个值,这是否是真正的函数依赖?不,这可能只是巧合。

话虽如此,我会做一些猜测。由于我无法从该电子表格中复制数据,因此我将假设一些我通常不会假设的事情,只是为了让您朝着正确的方向前进。

“工单号”不是键;两行有 23464504300055024。由于我无法复制数据,因此我不会尝试确定您是否有密钥,以及它可能是什么。

函数依赖的猜测

office -> region
office -> rsp
tech_code -> tech_name
tech_name -> tech_code
last_change_date -> dish_week_end_date
work_order_number -> work_order_type
work_order_number -> account_number
work_order_number -> car

计数可能仅取决于密钥(如果有的话)。

这足以让你继续前进吗?

【讨论】:

  • 感谢您的回复!这确实有帮助,老实说,我已经在路上了。我陷入了“分析瘫痪”,需要刚刚开始,这让它变得更容易了。至于工单号,我没有注意到。在这一点上,我还没有清理数据;然而,我确实问过运营经理这是否会是一样的,她说不会。她多年来一直在管理这些报告,所以我认为她的话对我来说已经足够了。所以不经意间你提出了一个好观点。我将不得不找出答案。再次感谢您提供实际有用的回复!
  • 作为一般规则,只要最终用户说某些东西是独一无二的,他们就会错。
猜你喜欢
  • 1970-01-01
  • 2018-02-07
  • 2017-04-03
  • 2017-06-23
  • 1970-01-01
  • 2021-11-07
  • 2016-07-08
  • 1970-01-01
相关资源
最近更新 更多