2

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

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

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。我可以使用存储过程来做到这一点,或者我可以只在所有SOMETHING VALUES 表中查询 question_ID。但是有没有更好的方法呢?

4

2 回答 2

1

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

您还可以将 min 和 max 字段移到 QUESTION 表中,并完全取消 ScaleValues 表。如果是多项选择题,您可以将其设置为 NULL。

于 2013-10-05T19:01:59.600 回答
0

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

问题 - QuestionId 和文本

答案 - AnswerId 和文本

QuestionAnswer - QuestionId、AnswerId 和 Points。

回答错误得 0 分。

这个设计可能太简单了。您可能还需要一个测试表。然后,您将需要该多对多表中的 TestId 字段,该字段现在称为 TestQuestionAnswer。

于 2013-10-05T20:47:28.183 回答