【发布时间】:2021-12-15 13:32:04
【问题描述】:
我有 3 张桌子:
1- 问题 2-答案 3- user_answers
questions
_________________
| id | question |
|____|__________|
| 1 | 1+1 |
|____|__________|
answers
_________________
| id | answer |
|____|__________|
| 1 | 1 |
|____|__________|
| 2 | 3 |
|____|__________|
| 3 | 2 |
|____|__________|
user_answers
______________________________________________
| id | answer_id | question_id | user_id |
|____|_____________|______________|___________|
| 1 | 1 | 1 | 1 |
|____|_____________|______________|___________|
| 2 | 3 | 2 | 1 |
|____|_____________|______________|___________|
| 3 | 2 | 3 | 1 |
|____|_____________|______________|___________|
如您所见,user_answers 表中存在多对多关系。
我不想将每个问题及其答案连续保存,而是将所有问题和答案保存为一个数组。因此,每个用户将有 1 行用于性能。
我对此进行了搜索,发现 serialize() 函数并且该列的数据类型应该是 Blob。
所以新表应该是这样的:
user_answers
______________________________
| id | array | user_id |
|______|_________|___________|
| 1 | Blob | 1 |
|______|_________|___________|
数组可能是这样的:
$array = array(
1 => 1,
2 => 3,
3 => 2
);
可能会有 20 多个问题。
这是最好的方法吗?或连续保存每个问题?还是为array 列使用其他数据类型?
【问题讨论】:
-
原来的方式是最好的方式。请参阅:Database normalization。如果您只想查看问题 14 的答案怎么办?
-
"for performance" 性能优势是什么,你做过一些测试吗?如果您想找出用户#1 对问题#2 的回答,怎么样?
-
如果我想得到一个特定的问题,我会获取整行并得到那个。我也会像第一种方式一样得到 1 行
-
@brombeer 我没有做任何测试。但我认为这比为每个用户保存 20 行要好
-
我认为您认为创建这么多行,为每个用户问题组合创建一个行,一定对性能不利,但事实并非如此。数据库是用来处理大量数据的。必须检索比实际需要更多的数据,然后必须对其进行处理,然后才能使用它,对性能不利。
标签: php mysql performance blob