数据库设计:我想要一个列值来确定要查询的表

时间:2013-10-05 18:47:14

标签: sql database-design

我在设计数据库方面没有多少经验。我想要一个列值来确定要查询的表,我不知道是否有更好的方法。以下是更好理解的具体问题:

我正在为调查创建者应用程序设计数据库。我想存储不同类型的问题(例如:多项选择题和基本文本问题)。我有以下表格:

QUESTION 
| ID | Title                        | TypeID |
----------------------------------------------
| 1  | "Pick a num from 1-10"       | 1      |
| 2  | "Choose some from the list:" | 2      |

TYPE
| ID | Name                  | ExtraValues |
--------------------------------------------
|1   |Scale Question         |ScaleValues  |
|2   |Multiple Choice        |MultiValues  |


SCALE VALUES
|Question_ID | Min | Max |
--------------------------
|1           | 1   |10   |

MULTI VALUES
|Question_ID | Name    | Value |
--------------------------------
|2           | Sugar   |  10   |
|2           | Milk    |  20   |
|2           | Egg     |  14   |

所以从现在开始,如果一个问题是“多选”类型,那么我想检查表MULTI VALUES,否则就是SCALE VALUES。我可以使用存储过程来完成它,或者我可以只查询question_ID的所有 SOMETHING VALUES表。但是有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

您当然可以这样设计数据库。但是,您无法在查询中获取“ExtraValues”列,并将该表自动拉入查询中。不是没有动态执行的sql。您最好的选择是在问题类型上使用分支逻辑,并使用它来确定从何处获取其他相关数据。

您还可以将最小和最大字段移动到QUESTION表中,并完全取消ScaleValues表。如果它是一个多选题,你可以设置为NULL。

答案 1 :(得分:0)

我认为有一个更好的方法来做到这一点。在问题和可用答案之间建立多对多的关系。添加第三列,名为points。所以你的三个表将是:

问题 - QuestionId和Text

答案 - AnswerId和文字

QuestionAnswer - QuestionId,AnswerId和Points。

错误答案奖励0分。

这种设计可能过于简单。您可能还需要一个测试表。那么你需要一个多对多表中的TestId字段,现在称之为TestQuestionAnswer。