2013-10-01 148 views
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 

我面对这里虽然的问题是,答案并不总是将是一个数字。有一些问题需要我存储bittext的值。

其他解决方案,我能想到的是denormalising问题,具有InfoQuestion表合并,然后Answers表:

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

最后,我还可以使答案列有nvarchar代替int,并根据需要只存储numericalboolean值。 (这看起来像是最简单的解决方案,但我需要定期备份不同数据库的答案,因为我无法控制,所以我必须确保这些值是可以转让的)

我在寻找什么对我来说最好的方法,如果它是我提到的那个或我无法想象的自己。

在此先感谢。

+1

第二(非规格化)解决方案非常糟糕,不要这样做。查找'sql_variant',它可能会简化你的第一个解决方案。 – dasblinkenlight

+0

@dasblinkenlight谢谢,我不知道'sql_variant'的存在。仔细研究之后,我将开始制定我的第一个解决方案,但用'sql_variant'替换回答中的'int'。 – Amber

回答

0

要解决我的问题,我曾经使用sql_variant类型为我answer列dasblinkenlight的建议。这个结果在我的答案表中看起来像这样:

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

而且它对我的目的非常有效。

0

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

例如: answerValueType:整数 answerValue:为nvarchar(255)