1
miemiekurisu 2015-09-17 21:48:45 +08:00 via Android 1
不违反三范式的前提下,感觉题目横表,选项和用户答案纵表。
当然也可以 mongodb 一个 document 搞定。 |
2
ljbha007 2015-09-17 21:56:49 +08:00 3
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 里 大概就是这样 |
3
Mirana 2015-09-17 22:01:34 +08:00 1
mongo 的应用场景不就在这吗
|
4
ldehai OP |
9
ljbha007 2015-09-17 22:15:52 +08:00
@ldehai mongodb 遇到多对一关系的时候最好还是另外建集合来放 然后手动关联过来 不然也会影响查询效率 不要用数组
|
10
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 中进行条件查询、排序等操作 |
12
keithsun80 2015-09-17 22:59:36 +08:00
|
13
keithsun80 2015-09-17 23:00:03 +08:00
mongoDB 尽可能冗余
|
14
ljbha007 2015-09-17 23:18:25 +08:00
@keithsun80 他这个情况是没有必要 有些情况应该做关联 比如我发那个链接的第一种
|
15
keithsun80 2015-09-17 23:26:11 +08:00
@ljbha007 学习了,谢谢。
|
16
orvice 2015-09-17 23:55:58 +08:00
mongo 吧
如果需要统计新增记录的时候顺便统计 |
17
oojiayu 2015-09-17 23:59:45 +08:00
去看看问卷星不就 OK 了吗?
问卷星已经做得很完善了~ 基本很少有同行可以超越~ |
18
EyreFree 2015-09-18 09:54:10 +08:00
|