我正在寻找有关表格的一部分设计的建议。
背景
我们正在收集多个站点的调查数据,其中一个问题是check all that apply
. 目前,基于该站点有 2-5 个可用选项,但这个数字可能会增加。当我获取数据时,我会得到 2-5 列(基于该调查中可用选项的数量),结果集中的每一列都会响应其中一个选项。列中的数据都将是NULL
或表示该特定调查的序数选项的文本值。不同的站点也会有不同的选项,因此不能保证第 1 列始终是相同的响应。目前总共有 13 个可能的选项可供选择,没有一个站点的可用选项超过 5 个,但我们可能会添加更多选项供选择,并且每个站点可能有超过 5 个选项未来。
样本数据
调查一:
Col 1 Col 2 Col 3
A B
B
A C
A B C
调查二:
Col 1 Col 2 Col 3
B D
D E
E
B
调查三:
Col 1 Col 2 Col 3
A D
D F
A F
A
问题
我如何最好地存储这些数据?
目前
我以 .CSV 格式获取数据,为了权宜之计和紧迫的截止日期,我一直将其粘贴到 Excel 电子表格中。(这就是为什么我想将它移到一个实际的表中......)我为每个可能的答案创建了一列,如果值在 中CSV.Col1 = Excel.TableHeader
,那么我在该列中放置一个 1。这使我能够快速过滤 Excel 行并对1
s 求和以获得快速总数。这对于实际数据库可能并不理想。
考虑的可能性
- 我考虑过为 13 个选项中的每一个分配一个值并将它们相加以将它们存储在一个列中。例如:
- 一个= 1
- 乙 = 2
- C = 4
- D = 8
所以我Survey 1
上面的例子将存储以下值: - 3个
- 2个
- 5个
- 6个
- 我考虑过保留它,因为它目前有 13 列布尔值、数字或文本格式。每列将根据需要包含
[True|False]
、[1|0]
或[A|B|C|D...]
。 - 创建一个
1:M
从属表来存储每行的结果,链接到该调查的主表行。子表将有一个PK
,一个Foreign Key
返回到父表,以及一个text
用于保存响应的列。
后端
数据将从 Excel 移至 Access,目的是尽快将其移至 SQL Server。
选项 3 是经典的3NF设计。如果您需要快速将数据添加到表中,这可能是插入时性能最高的方法,因此如果您需要快速插入数据并且有高并发性问题,这可能是可行的方法。
对我来说,听起来您正在尝试解决分析问题。如果是这样的话,我会选择选项 2。这是一种去规范化的方法。您的用户可能已经以这种方式考虑他们的数据,因此他们会欣赏其中的简单性。通过您接收数据的方式,这可能是最难实现的,但仅仅为了获取数据而付出的努力将是值得的。您的用户会欣赏优雅,希望这是您的目标。
祝你好运!
选项 1 是可行的,但不是非常用户友好,并且在破译您的值时会占用您的 CPU。选项 3,具有正确设计的索引将是您的最佳选择。