【发布时间】:2011-05-23 02:28:09
【问题描述】:
我有一段时间没有设计数据库了,我现在对自己的设计没有太大的信心。我基本上在数据库中有三个表,它们代表各种历史。我必须更改此系统,以便每次添加记录(例如,某些内容成为历史记录)时,可能需要用户的一些输入。有时他们只会提出一个简单的问题,有时他们会被要求提供五种不同的信息,这些信息需要由最终用户通过管理前端进行灵活管理。所以我计划有一个问题表和答案表,用复合表将它们与其他三个表联系起来。我正在努力设计答案表,因为每个问题都可能需要各种回答。一些响应将是通过外键绑定到另一个数据库的下拉选择。其他可能是文本输入、日期或是/否答案。现在,我有一个答案表,其中包含所有类型的答案以及一系列可为空的字段...
+----------------------------+
| Answer |
+----------------------------+
| Id (int) |
| QuestionId (int) |
| ForeignKeyId1* (int) |
| ForeignKeyId2* (int) |
| ForeignKeyId3* (int) |
| Number* (bigint) |
| DateField* (date) |
| Text* (varchar 500) |
| YesNo* (bit) |
+----------------------------+
*Nullable
旁注:问题表与 QuestionType 相关联,该 QuestionType 将指示(在应用程序内)如何验证用户输入。输入存储在 Answer 记录中相应的可为空字段中,而其他字段为空。我认为这比没有数据完整性的 catch all varchar 答案字段要好。
这是一个糟糕的设计吗?有什么可以让它变得更好?
【问题讨论】:
标签: database-design relational-database