0

我正在尝试创建一个数据库,但每次我查看我需要什么以及如何去做时,我认为不同的解决方案会更好。我将在下面描述我的情况,并想知道最好的方法是什么以及为什么:

我目前有一个包含我的要求的 excel 文件,它包含一个类别列表、子类别和需要填写的相应问题以及他们需要与之相关的人员。这通常是一个简单的案例,将类别、子类别存储在一个表中,将其链接到一个问题表,然后拥有一个引用问题和人员表的答案表。像这样:

Person:
personID: int identifier
personName: nvarchar(50)

Info:
infoID: int identifier
infoCat: nvarchar(50)
infoSubCat: nvarchar(50)

Question
questionID: int identifier
questionText: nvarchar(100)
questionInfo: FK relating to infoID

Answer:
answerID: int identifier
answerQuestion: FK relating to questionID
answerPerson: FK relating to PersonID
answerNumber: int

不过,我在这里面临的问题是答案并不总是一个数字。有些问题需要我存储一个bit或一个text值。

我能想到的另一个解决方案是将问题非规范化,有一个表InfoQuestion合并,然后是一个Answers表:

Answers:
AnswersID: int identifier
AnswersPerson: FK relating to PersonId
Answer1: int
Answer2: bit
Answer3: int
etc..

最后,我还可以让答案列有nvarchar而不是int,并根据需要在其中存储numericalboolean值。(这似乎是最简单的解决方案,但我需要定期将答案备份到我无法控制的不同数据库,因此我必须确保这些值是可转移的)

我正在寻找对我来说最好的方法,如果它是我提到的方法之一或我自己想不到的方法。

提前致谢。

4

2 回答 2

0

您可以将任何值序列化和淡化为字符串和来自字符串。您可以将值类型存储到第二个字段。

例如: answerValueType: int answerValue: nvarchar(255)

于 2013-10-01T09:29:35.657 回答
0

为了解决我的问题,我使用了 dasblinkenlight 的建议,即在我的专栏中使用sql_variantas type 。answer这个结果在我的答案表中看起来像:

Answer:
answerID: int identifier
answerQuestion: FK relating to questionID
answerPerson: FK relating to PersonID
answerNumber: sql_variant

它对我的目的非常有效。

于 2013-10-08T13:44:39.970 回答