日期:2014-05-18  浏览次数:20508 次

问一个简单的数据库设计问题
需求是这样:
客户下订单,每个订单中可以选择具体的支付途径,选择了不同的途径后,需要填写不同的问题,这些问题有个汇总,比如一共有10项问题,下订单时如果选择支付途径1,则需要填写10项问题中的其中5项,选择支付途径2,则需要填写10项问题中的其中6项,等等以此类推,问题以后可能会需要修改(比如添加新问题,当然也有可能10项问题里面又要废除若干项),那么现在如何设计数据库呢?

表A 内容表,保存所有的问题
表B 订单表
表C 订单问题表,与表A和表B关联,保存表B中每个订单用户具体填写的问题

以上是我自己想的最标准的设计方案,问题在于表C的设计,表C里面每条记录要保存所属订单的订单ID,以及问题的题目和答案,这样每个订单对应在表C里面就有若干条记录,比如订单1,选择支付途径1,需要填写5项问题,那么在表C里面就有订单ID为1的5条记录,每条记录保存了当时填写的问题的题目和答案

以上的设计好不好?有没有更好的设计方案?

------解决方案--------------------
业务逻辑问题
不懂 帮顶 学习
------解决方案--------------------
自己想的最标准的设计方案
------解决方案--------------------
SQL code

表A 订单表(订单ID,支付途径ID)
表B 支付途径表(支付途径ID,逗号分隔的题目ID)
表C 题目表(题目ID,题目内容)
表D 用户回答表(订单ID,题目ID,回答内容)

------解决方案--------------------
探讨
SQL code

表A 订单表(订单ID,支付途径ID)
表B 支付途径表(支付途径ID,逗号分隔的题目ID)
表C 题目表(题目ID,题目内容)
表D 用户回答表(订单ID,题目ID,回答内容)

------解决方案--------------------
探讨
需求是这样:
客户下订单,每个订单中可以选择具体的支付途径,选择了不同的途径后,需要填写不同的问题,这些问题有个汇总,比如一共有10项问题,下订单时如果选择支付途径1,则需要填写10项问题中的其中5项,选择支付途径2,则需要填写10项问题中的其中6项,等等以此类推,问题以后可能会需要修改(比如添加新问题,当然也有可能10项问题里面又要废除若干项),那么现在如何设计数据库呢?

表A 内容表,……

------解决方案--------------------
其实我最怨念的就是mssql没有高效split函数。。。
表B为了日后方便的话可以考虑
表B 支付途径表(支付途径ID,题目ID,所需回答的顺序ID)

探讨

引用:
需求是这样:
客户下订单,每个订单中可以选择具体的支付途径,选择了不同的途径后,需要填写不同的问题,这些问题有个汇总,比如一共有10项问题,下订单时如果选择支付途径1,则需要填写10项问题中的其中5项,选择支付途径2,则需要填写10项问题中的其中6项,等等以此类推,问题以后可能会需要修改(比如添加新问题,当然也有可能10项问题里面又要废除若干项),那么现在……