2013-10-01 192 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)