我该如何规范化这张桌子?

时间:2011-08-15 20:38:50

标签: ms-access normalization

我正在尝试使用Access 2010找出规范化以下数据集的最佳方法。

我正在建立一个数据库来跟踪一组工人的数据输入。他们正在阅读文档,这些文档是带有代码编号的地图,用于安装作业,以及这些作业的相关信息,并将这些项目输入数据库。从每个文档收集的代码编号有两种主要类型。目前,我将所有数据写入平台。我有以下字段(*表示该字段可以为空白):

  • workerID :工作人员的身份证号码
  • documentID :与每个文档相关联的唯一字符串
  • work_date :工作人员输入此数据的日期
  • code1 :第一种代码编号
  • * code1Year :与code1
  • 相关联的安装年份
  • * code1Type :code1的作业类型的字符串
  • * code1Loc1 :code1的地址编号(类型1)
  • * code1Loc2 :代码1的地址编号(类型2)
  • * code1Loc3 :代码1的地址编号(类型3)
  • code2 :第二种代码编号
  • groupID :代码的成员资格组(可与code1或code2一起使用)
  • code1verified :布尔标志,表示已验证code1及其相关信息已从文档中正确转录
  • code2verified :布尔标志,表示已验证code2及其相关信息已从文档中正确转录

这是我的规范化计划:

  • tableName:(PRIMARY_KEY),(foreign_key),field1,field2 ......
  • 工人:(WORKER_ID)
  • 组:(GROUP_ID)
  • code1Type:(CODE1TYPE_ID),code1Type
  • workDays:(WORKDAY_ID),(worker_id),work_date
  • locTypes:(LOC_ID),locationType
  • code1:(CODE1_ID),(workday_id),code1,(code1Type_id),(group_id),code1verified
  • code1Loc:(CODE1LOC_ID),(code1_id),(loc_id),code1Loc
  • code1Year:(CODE1YEAR_ID),(code1_id),code1Year
  • code2:(CODE2_ID),(group_id),(workday_id),code2,code2verified

这是将这些值相互关联的最佳方式吗?

1 个答案:

答案 0 :(得分:0)

在没有真正了解数据的情况下,我能说的最好的是它需要一些工作。

我认为code1Yearcode1Typecode1Loc*也未在code1中编码。

我认为你仍然需要一个表来存储你读过的行。它可能只是这样的:

  • map_table:(MAP_ID),WORKER_ID,GROUP_ID,WORKDAY_ID,CODE1_ID,CODE1LOC_ID,CODE1YEAR_ID,CODE2_ID

我会考虑为CODE1YEAR删除单独的表,因为它应该只是一个整数,并且你多久会重新将2009年重新标记为其他东西。与WORKDAY_ID类似,为什么不将它设为日期字段。

对我来说,Code1和Code2包含group_idworkday_id

的原因并不明显

同样WORKER_IDGROUP_ID似乎是裸露的,除非它们仅用于验证ID