gpt4 book ai didi

SQL - 调查数据,循环调查问题的表模式设计

转载 作者:行者123 更新时间:2023-11-29 14:28:42 25 4
gpt4 key购买 nike

假设我们有一项调查,其中一些问题是跨多个实体提出的。

例如:
汽车品牌 = [品牌 1、品牌 2、品牌 3、品牌 4...]

每个汽车品牌都会问这个问题(循环)。
Question Q01 = (Scale 1-10) 你觉得[Car Brand]的车靠谱吗?
问题 Q02 =(1-10 分)您认为[汽车品牌]的汽车物有所值吗?
...

我正在设计一个架构,该架构将为一些基于网络的分析工具提供支持,因此查询性能很重要。

模式将是 3 个表:记录、问题、答案

答案表有两种方法:

A)表:答案

QuestionId | AnswerValue | BrandOption 
Q01 | 7 | 1
Q01 | 5 | 2
Q01 | 4 | 3
Q01 | 8 | 4

B)表:答案

QuestionId | AnswerValue
Q01-1 | 7
Q01-2 | 5
Q01-3 | 4
Q01-4 | 8

查询可以一次针对一个品牌,也可以针对所有品牌,两个查询的优先级相同。

如果我需要执行分组依据之类的操作,选项 A 似乎会给我一些优势,但是如果大多数查询都是针对特定品牌的,那么选项 B 似乎更有效。

想法?

最佳答案

选项 A 更好,即使您现在看不到它。
将多个值存储在单个数据库“单元格”中无论从哪个角度看都是一个错误(尽管不幸的是,这是一个非常常见的错误)——更不用说它违反了 first normal form - 它明确指出每一列在每一行中只能包含一个原子值(尽管原始规则使用了不同的术语)。

缺点很多,其中一些很关键,包括(但不限于):

  • 您失去了使用正确数据类型的能力 - 存储在一起的两个 int 必须存储为与 int 不同的数据类型。
  • 您可能会失去验证数据的能力,事实上,正确的,或者不同的部分可以转换为正确的数据类型(现在大多数数据库都支持检查约束,但不是全部(是的,MySql,我是我用手指着你!))
  • 您失去了分别对数据的每个部分强制执行唯一性的能力。
  • 您不能将数据的不同部分用作外键约束的基础

这个列表一直在继续 - 但我认为现在任何人都应该了解情况 - 应该使用数据库列来存储每行的单个值 - 每次。

关于SQL - 调查数据,循环调查问题的表模式设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54834274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com