2012-10-02 61 views
1

我需要表示一個稱爲E-Report的表單,用戶將在其中添加數據。允許空值的外鍵列

每個E- Report將有一個QAP和每個QAP將有兩個或更多Defects

這些缺陷會顯示在這裏,在這個表:

enter image description here

,第一時間,該表將有兩個缺陷,用戶可以從漢鼎亞太添加更多的缺陷,或插入新的他/她認爲這是必要的。

用戶將檢查或不CRSCRFMAMI列,我將節省EReportDefect表中的這些數據。

順便說一下,QAPDefect數據將在一個網絡服務,我需要下載它到我的Android設備。我無法修改添加更多數據的這兩個表。

爲了表示我設計了這個的Visio:

enter image description here

因爲我無法將數據添加到Defect表我創建EReportDefect表來存儲CRSCRFMAMI用戶數據和存儲由用戶創建的新缺陷。

爲了表示用戶添加的新的Defect,我將EReportDefect.defectId設置爲NULL,並將EReportDefect.description設置爲存儲新的缺陷描述。

這些新缺陷在EReportDefect.defectId上將沒有任何價值,在EReportDefect.description上的值將不具有任何價值。

這是正確的嗎?我可以有一個NULL值的外鍵列嗎?你知道更好的方法嗎?

+1

我沒有真正閱讀所有這些,但允許一個外鍵爲空並不奇怪。 – keyser

回答

3

可空的外鍵是完全可以接受的。

請考慮以下情況,即設計爲由用戶響應的消息表。

CREATE TABLE Messages 
(
    MessageId int, 
    MessageText varchar(256), 
    AnsweredByUserId int 
) 

現在,當首次創建初始未答覆消息時,AnsweredByUserId將爲NULL。這很好。該消息尚未得到答覆,所以我們不希望在那裏找到價值。當有人確實回答消息時,我們希望將他們的UserId放入AnsweredByUserId中,並且當發生這種情況時(例如,我們希望確保我們插入的UserId實際存在於我們的Users表中),我們希望強制實施參照約束。

總之,在適當的情況下可以使用NULLABLE外鍵。