快速背景故事......我接受过数据库设计和管理方面的培训。我在各种职位和职业生涯中都小规模地使用过它们。我最近获得了CMIS的学士学位,数据库也是其中的一部分。我理解关系数据库背后的理论,它们如何工作,以及最终如何构建它们。我只是没有足够的练习才能精通。
我的老板今天决定,他希望我收集我们从合作伙伴公司获得的所有报告,并将它们放入数据库。对我而言,这似乎是一项艰巨的任务,因为有不少于30份报告,其中许多报告有很多数据。我们以excel格式获得它们。
我理解规范化,但只是在理论上,只在小规模(如典型的学生,教师,类似的场景似乎永远存在)。我在这里看大尺度,有点头晕。
以下是其中一个较小报告的链接。它已经在1NF(它就是这样,因此没有大问题)。我希望看到一个示例,它看起来像3NF标准化,这可能有助于为其余报告提供一些东西。
现在,我感到困惑的是,这些报告实际上都不依赖于其他报道。但是,其中有很多重复数据。这意味着所有这些都有技术编号和技术名称,以及工单号。虽然技术数字和名称是有限的并且重复,但工作订单编号可能是相同的,也可能不是,如果这是有道理的。
据我所知,拥有一张只包含技术信息的表是有意义的。然后仅使用数字关联报告,并从任何报告中取出技术名称。我还有很多问题,但现在就将它留在这里。
任何btw,在任何人说“将数据放在网上这样愚蠢”之前,这已被修改,因此它不是正确的数据,基本上没用。
https://docs.google.com/spreadsheet/ccc?key=0ApvRcXXd6PiWdHFLRWVmNS1VUklpYkFvWVdKQmpvdWc
答案 0 :(得分:1)
通过BCNF进行规范化基于密钥和功能依赖性。您发布的数据中没有足够的信息可以标准化为3NF。
例如,region,rsp和office只有一个值。因此,在您的示例数据中,所有其他列将确定区域,rsp和办公室的唯一值。
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
如果有钥匙,计数可能只取决于钥匙。
这足以让你前进吗?