聚合和分散2 /表设计问题的力量

时间:2015-05-17 15:41:37

标签: math design-patterns database-design bit-packing

我有一些数据,我正在努力跟踪工作文书工作的各种问题。数据看起来像这样:

ID      |     Paperwork 1    |    Paperwork 2    |    Paperwork 3
1       |     No Signature   |     No Signature  |      Missing Date
2       |     Completed      |      No Signature |     Missing Signature
3       |      Missing Date  |     Completed     |       Completed
4       |      None          |    Completed      |       Missing Signature

N个类别的文书工作,M个不同的ID或行,以及每个字段中X个不同的可能响应,我正在尝试确定哪个ID以及哪个类别的文书工作在哪里。

我想到了两种不同的桌面设计。

两栏设计:

ID    |    Paperwork
1     |      1
2     |      4
3     |      10
4     |     257

使用相应的代码库

0 = No Paperwork 1
1 = No Paperwork 2
2 = No Paperwork 3
4 = Paperwork 1 Submitted Successfully
8 = Paperwork 2 Submitted Successfully
16 = Paperwork 3 Submitted Successfully
32 = Paperwork 1 Missing Date
64 = Paperwork 2 Missing Date
128 = Paperwork 3 Missing Date
256 = Paperwork 1 Missing Signature
512 = Paperwork 2 Missing Signature
1024 = Paperwork 3 Missing Signature

因此,我们只需通过查看文书工作栏中的任何数字就可以了解,这期间不同文书工作的问题是什么。在两列设计中,错误将是:

双栏设计:

ID    |    Paperwork
1     |     No Paperwork 2
2     |     Paperwork 1 Submitted Successfully, No Paperwork 2
3     |     Paperwork 2 Submitted Successfully, No Paperwork 3
4     |     Paperwork 1 Missing Signature, No Paperwork 2

这种设计的问题是: 1)很容易将数字放入文书工作栏 - 有人需要查看该期间的所有文书工作,并注意每个文书工作的各种问题或缺乏问题。一旦发现这些问题,就会为每个问题分配一个数字,然后将这些数字相加,以找出包含该给定时期内所有问题的总数。但是,我不知道如何从这些特定数字中输出文本输出,我也不想强行列出所有潜在的文本输出,因为有太多不同的可能性。它可以稍微缩小,因为你不能有一个完整的文书工作缺少一个签名,但这听起来像太多的可能性   所以我的问题是:如果我得到数字257,我怎么能说257真的是256 + 1?我是否需要,或者我是否需要这种不必要的复杂化?

或者,我想到的另一种方法是将所有错误包含在更多二进制变量中。因此,它不是上面列出的错误代码,而是看起来像:

许多列

0 = No Paperwork 
1 = Paperwork Completed
2 = There is an error with Paperwork 1
3 = There is an error with Paperwork 2
4 = There is an error with Paperwork 3

那么表格就是:

ID      |     Paperwork 1    |    Paperwork 2    |    Paperwork 3
1       |     2              |     3             |      4
2       |     1              |     3             |      4  
3       |     2              |     1             |      1
4       |     0              |     1             |      4

然后当我尝试运行报告文书工作的各种问题时,我需要做的就是有一个查找函数来计算文书工作1列中数字2的实例数,然后找到相应的ID。然后我会将这些信息提供给我的同事和老板,然后他们会知道这个人的文书工作存在问题;但是他们不会具体知道问题是什么,而且需要依靠对书本身的第一手资料。

这种设计的问题在于它隐含地要求人们与管理书籍的同事核实,以找出文书工作的问题,而我参与这项工作的全部意义在于帮助她。与她的工作,并利用计算机的力量帮助她完成任务。所以第二种设计似乎并没有充分发挥计算机技术的潜力来帮助完成任务。

因此,除了之前提出的问题外,我完全欢迎任何问题,要点或方向。如果你有另一种桌子设计,我也欢迎你。

如果这篇帖子违反了任何关于不直接的stackoverflow政策,我提前道歉,我试图尽可能直接地做到这一点。

1 个答案:

答案 0 :(得分:0)

要回答关于“分解”257的问题(即基本上找到它的二进制表示),您可能希望使用按位运算:http://www.excely.com/excel-vba/bit-operations.shtml。但是,您的第二个想法似乎要好得多,因为它允许您更明确地查看数据。理想情况下,如果您转向比Excel更高级的东西,例如使用python脚本和csv文件(甚至数据库,但可能需要更多技术知识和维护),您的过程可能会更好,更容易维护)。