JPA的SQL结构-行还是列?

时间:2019-02-25 19:08:58

标签: java mysql hibernate spring-boot jpa

我正在编写一个小的测验应用程序,并试图构建数据库。 基本思想是使用户的回答率为固定数量的问题(1-10个回答),并根据这些回答生成结果。

我在数据库结构的实现上遇到了一些麻烦-我不确定是否将所有答案都放在一行中,但要放在不同的列中,或者对于每个答案来说都是一行(结果是很多行只有三行)或四列)

我在想的数据库图如下:

一个用户只能有一个结果,而一个结果属于一个用户

一个用户可以回答许多问题,一个答案属于一个用户

每个答案仅属于一个问题,但是一个问题可以有多个答案(许多用户在回答)

enter image description here

这些是我具有此实现的数据库表:

结果表

| ResultID (PK) | UserID (FK)  | TotalScore | ResultText|

用户表

| UserID (PK)  | Name | Email  | Name |

答案表

| AnswerID (PK) | QuestionID (FK)  | UserID (FK) | Answer |

问题表

| QuestionID (PK) | Question |



此结构为完成的测验创建了九个新行,如果可以使用每个问题的列(问题1-问题9)将它们放入一行,则数据库中似乎有很多不必要的“空格”。 / p>

但是,这给JPA和Hibernate带来了一些问题,因为我必须为每个问题创建变量(导致大量冗余)。这种方法至少应该让我只有一个List数组来保存所有9个问题。

我担心的是将占用数据库的行数。大约有10000-15 000人回答此测验,那么仅此简单实现的9万多行会影响数据库查询的速度吗?还是将其保持在上述水平是可以的吗?

1 个答案:

答案 0 :(得分:1)

这里的要点是,您不需要答案表。由于其中的数据将永远不会更新。因此,您只能使用一列来表示用户的所有答案,例如JSON列。

使用postgresql可以通过添加JSON列来实现,但是如果使用NoSQL,则可以做得更好。由于您将用户的结果分开,因此我认为没有必要单行回答。这是无法修改的值。

希望有帮助。