调查问卷数据库设计

2015-09-17 21:40:38 +08:00
 ldehai
因为每道题答案选项个数不一致,有的还是多选。这种是用关系数据库建多个表好,还是用 mongodb 建一个表搞定?一道题一条记录。
7722 次点击
所在节点    程序员
19 条回复
miemiekurisu
2015-09-17 21:48:45 +08:00
不违反三范式的前提下,感觉题目横表,选项和用户答案纵表。
当然也可以 mongodb 一个 document 搞定。
ljbha007
2015-09-17 21:56:49 +08:00
forms
====
id int (pk )
userId int (fk )
title varchar
description varchar

questions
=====
id int (pk )
form_id int (fk )
question varchar
answer_type enum (multi_choice, single_choice, text )

choices
=====
id int (pk )
question_id int (fk )
description varchar

text_answers
======
id int (pk )
session_id int
question_id int (fk )
content varchar

choice_answers
=======
id int (pk )
session_id int
question_id int (fk )
choice_id int

大概这个样子
根据问题表的 answer_type 判断时多选、单选还是 文字回答

1. 单选、多选都去 choices 表查选项 只是前端控件不一样
用户填完就插入到 choice_answers

2. 文字回答就直接插入到 text_answers 里

大概就是这样
Mirana
2015-09-17 22:01:34 +08:00
mongo 的应用场景不就在这吗
ldehai
2015-09-17 22:06:05 +08:00
@miemiekurisu 题目表和答案表还好,就是选项表看得不爽。
@ljbha007 谢谢,好详细,表都不用我设计了。关系数据库就是查询的时候要多表关联,比 N OSQL 的要麻烦。
ljbha007
2015-09-17 22:09:05 +08:00
@ldehai 你用 mongodb 这种很多时候也需要表间关联的 不然效率很低
ldehai
2015-09-17 22:09:15 +08:00
@Mirana 因为对 mongodb 不熟,看了介绍感觉比较合适。插入、更新、查询应该没问题。就担心统计麻烦。
ljbha007
2015-09-17 22:11:51 +08:00
@ldehai 有些字段还得根据需求加上或者去掉
ldehai
2015-09-17 22:13:50 +08:00
@ljbha007 明白,谢谢
ljbha007
2015-09-17 22:15:52 +08:00
@ldehai mongodb 遇到多对一关系的时候最好还是另外建集合来放 然后手动关联过来 不然也会影响查询效率 不要用数组
ljbha007
2015-09-17 22:23:08 +08:00
@ldehai

下面两种都是一对多关系 但是会根据情况直接 embed 进去还是用集合间关联

http://docs.mongodb.org/master/tutorial/model-referenced-one-to-many-relationships-between-documents/

http://docs.mongodb.org/master/tutorial/model-embedded-one-to-many-relationships-between-documents/

主要是下面两个判断准则

1. 如果把“一”的 document 嵌入到多个“多”的 document 中时发生的冗余是否可以接受
2. “多”的 document 是否需要 再整个集合中而非单个 document 中进行条件查询、排序等操作
ldehai
2015-09-17 22:24:34 +08:00
@ljbha007 兄弟很有经验,主要是想存题目简单点,现在的业务多对一的情况不多。
keithsun80
2015-09-17 22:59:36 +08:00
@ljbha007 mongoDB 不做关联, 直接存储对应结构
问卷
[题 1 , 2 , 3 ,……… ]
keithsun80
2015-09-17 23:00:03 +08:00
mongoDB 尽可能冗余
ljbha007
2015-09-17 23:18:25 +08:00
@keithsun80 他这个情况是没有必要 有些情况应该做关联 比如我发那个链接的第一种
keithsun80
2015-09-17 23:26:11 +08:00
@ljbha007 学习了,谢谢。
orvice
2015-09-17 23:55:58 +08:00
mongo 吧
如果需要统计新增记录的时候顺便统计
oojiayu
2015-09-17 23:59:45 +08:00
去看看问卷星不就 OK 了吗?
问卷星已经做得很完善了~ 基本很少有同行可以超越~
EyreFree
2015-09-18 09:54:10 +08:00
....

https://mart.coding.net/p/109

是这个么, 2333

QAQ
ldehai
2015-09-18 10:00:30 +08:00
@EyreFree 想多了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/221577

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX