本文发表在 rolia.net 枫下论坛以前同事把后台db设计成每一个question answer 都设立一个独立的column.
example
web form
question A
question B
question C
...
question Z
database
table survey
userpk question _A , question_B, question_C ... question_Z
如果问题不多,那也就算了, 但是每年要更新很多questiones 我觉得这样不是一个很好的design
所以我想把它改成
先设立一个题库
table question
pk
question
table survey
userpk questionpk answer
这样可以一劳永逸解决adding column 的难题了。 而且每个table也比较skinny。 但是问题是 answer column data type 不好解决。 some answer 可能只是int 有些就用到varchar(10000)
碰到这种情况我只能把它设置成varchar 最大值。 但很多是浪费的。
所以我想把不同的date type answer 存到不同table里
table survey-int
userpk questionpk answer (int)
table survey-shortstring
userpk questionpk answer(varchar 500)
able survey-longstring
userpk questionpk answer(varchar 5000)
这样可以解决上述问题。 但速度可能要影响。还有generate report时好像比较繁。 好像要用到tabulate什么的
不知那位大侠有没有更好的建议
谢谢更多精彩文章及讨论,请光临枫下论坛 rolia.net
example
web form
question A
question B
question C
...
question Z
database
table survey
userpk question _A , question_B, question_C ... question_Z
如果问题不多,那也就算了, 但是每年要更新很多questiones 我觉得这样不是一个很好的design
所以我想把它改成
先设立一个题库
table question
pk
question
table survey
userpk questionpk answer
这样可以一劳永逸解决adding column 的难题了。 而且每个table也比较skinny。 但是问题是 answer column data type 不好解决。 some answer 可能只是int 有些就用到varchar(10000)
碰到这种情况我只能把它设置成varchar 最大值。 但很多是浪费的。
所以我想把不同的date type answer 存到不同table里
table survey-int
userpk questionpk answer (int)
table survey-shortstring
userpk questionpk answer(varchar 500)
able survey-longstring
userpk questionpk answer(varchar 5000)
这样可以解决上述问题。 但速度可能要影响。还有generate report时好像比较繁。 好像要用到tabulate什么的
不知那位大侠有没有更好的建议
谢谢更多精彩文章及讨论,请光临枫下论坛 rolia.net