我正在处理一个处理问题和答案的应用程序。我的答案可以是不同类型,包括int,text,image,option等。我想知道将它们分成如下所示的不同表格是否是一个好习惯?
Question QuestionAnswer
-------- -------------
int Id int QuestionId
int typeId int AnswerId
TextAnswer ImageAnswer OptionAnswer IntAnswer
---------- ----------- ------------ ---------
int AnswerId int AnswerId int AnswerId int AnswerId
nvarchar Value binary Value int Value int Value
int OptionTypeId
我考虑将所有这些聚合到一个单独的答案表中,然后它将填充可空字段,如果我不小心,我担心可能会引入一些错误。这是一个好主意还是这个设计是分离不同类型答案的好方法?或许还有更好的方法吗?谢谢!
答案 0 :(得分:0)
一个表(对于所有答案),四个表(对于每种答案类型)或五个表(一个用于所有答案,然后一个对每种类型特定)的问题取决于两个因素。
最重要的是:如何使用数据?第二个是:你使用的是什么数据库?
首先让我免除第二部分。一些数据库(特别是Postgres)内置了对表继承的支持。你可以阅读[文档]; 1;它可能会做你想要的。
对于其他数据库,您如何选择?好吧,你有一张AnswerId
的表格。这表明您需要一个具有自动生成的主键的实体。
那么,您是否将所有信息存储在该表中?将所有列放在单个表中的一个论点是简单性:所有数据都在一个地方。您可以使用NULL
约束强制执行check
- 值。一个缺点是添加新类型需要修改表。
另一种选择是拥有每个特定的表。他们可以使用AnswerId
作为主键,并将其作为Answers
的外键。这使得它们各自添加新类型。但是,确保答案只有一种类型可能很麻烦。连接有点复杂。
在大多数情况下,我倾向于使用一个表格和列的增加,特别是如果我事先知道预期的类型范围。