2012-03-27 33 views
0

我有一個存儲清單問題答案的表格,其中清單格式爲yes, no, not applicable, or resolved數據庫表格設計,用於存儲對問題的是,否和數量類型回答

Table: CHECKLIST_ANSWER 
     ATTRIBUTE_ID PK, FK 
     CHECKLIST_INSTANCE_ID PK, FK 
     TOGGLE_VALUE (1=yes, 2=No, 3=n/a, 4=was a no then it was resolved) 
     FAIL_REASON 

ATTRIBUTE_ID是一個外鍵的問題表,即Was the part measured within some tolerance?

現在我想將存儲量反應的清單,即模擬How many incorrect dimensions were found on the drawing?

我有信心,我可以存儲這些問題與我的同一個表中的yes/no/na類型屬性相同,但我可以使用同一個表來存儲數量值嗎?我應該添加一個新的列,如QUANTITY_VALUE?然後,根據屬性,QUANTITY_VALUE或TOGGLE_VALUE將爲空。

Table: CHECKLIST_ANSWER 
     ATTRIBUTE_ID PK, FK 
     CHECKLIST_INSTANCE_ID PK, FK 
     TOGGLE_VALUE (1=yes, 2=No, 3=n/a, 4=was a no then it was resolved) 
     QUANTITY_VALUE 
     FAIL_REASON 

這個數據庫應用程序的目標是將紙張和在線練成清單和捕捉到Oracle給提供的指標更有效地收集和輸入則更好aggreagation。我是否通過將兩張表合併成一張表來請求麻煩?或者我應該創建一個表格,CHECKLIST_QTY_ANSWER

+0

很難說,FAIL_REASON已經使這張表非標準化了嗎? – 2012-03-28 14:26:08

+0

我想它確實如此,因爲如果TOGGLE_VALUE是1(是)那麼這意味着傳遞的屬性,所以不會有fail_reason。我應該把這個專欄分解到自己的表中嗎? – jeff 2012-03-28 17:41:31

回答

0

如果您有很多選項,您通常會創建一個單獨的表格,只有一個id和描述(或名稱)。要連接這兩個表,您需要在CHECKLIST_ANSWER-Table中插入一個字段,並將其定義爲一個外鍵,該外鍵引用新表的id(主鍵),我首先提到了這一點。

希望它是明確的:)

+0

謝謝,但你沒有回答這個問題。閱讀我的問題中的第三段。它聲明我有一個選項查找表。 – jeff 2012-03-27 17:26:25

0

如果我理解你的問題正確的您正在尋找諮詢如何存儲的新型架構中的答案?

由於這是一種新的答案,您需要指出數據的格式現在與您的y/n/na答案類型不同。您可以在CHECKLIST_ANSWER表中添加另一個表CheckListAnswerTypeFK

但是,您的CHECKLIST_INSTANCE_ID可以很容易地表明這是一種符合特定答案模式的清單。我不確定你的模式購買的其餘部分,你可以有一個CHECKLIST_INSTANCE表,它指定它的答案類型...

你的TOGGLE_VALUE可以遵循數字方案爲你的新答案類型和前面提到的CheckListAnswerType你在查詢數據時可能並且必須始終考慮這一點,以確保您在給定問題上下文時未選擇錯誤答案類型,以便在查找How many incorrect dimensions were found on the drawing?答案時沒有得到「是」值。

我認爲所有這些都可以,直到你開始想要存儲不同數據類型的答案。那麼現在是重新設計模式的時候了。

TL; DR:如果您使用相同的數據類型作爲答案,那麼您可以重新使用現有的模式(列),同時添加一種方式來告訴答案或問題/答案,分開類型準確查詢。如果要在TOGGLE_VALUE中存儲其他數據類型,請實施新的模式對象。如果可以避免的話,不要試圖強制其他數據類型進入當前模式。此外,如果你這樣做考慮重命名TOGGLE_VALUE,因爲它不再代表切換。 answerValue可能更適合新設計。

0

我看不出將新列添加到現有表中的問題。我會包含一個檢查約束,要求TOGGLE_VALUEQUANTITY_VALUE爲空(但不是兩者)。

沒有理由創建第二個幾乎相同的表格,其中只有一列變化。根據我的經驗,這往往會導致比單表解決方案更多的問題(這實際上是使用動態SQL的邀請)。

我絕對不會重複使用現有的列(如另一個答案中所建議的那樣),因爲這樣可以防止在切換值上使用外鍵。