2012-09-04 50 views
0

讓我們拿一張表來存儲客戶向我們發送的消息。因此,假設客戶要求我們向他們發送對他們發送給我們的信件的回覆,我們還希望存儲在該表中。如果他們已經要求回覆,那麼我們通過記錄他們的電子郵件地址和預期日期來存儲該信息。如果他們不想回復,我們不需要他們的電子郵件地址。SQL架構設計 - 使用可空字段替換布爾列

Correspondences 
    Primary_key 
    Content 
    Date 
    Response_expected 
    Return address 
    Return date 

或者,我們可以擺脫response_expected列的完全並同意返回null地址/歸期表示「沒有響應預期」,和一個非空的一個手段,一個響應的預期。應用程序將負責使用此邏輯,而不是檢查明確的「我們是否需要響應?」領域。

(假設爲了這個問題,約束已到位,以便返回地址和日期必須爲空,除非預期的響應是肯定的......我的觀點是這一列不會被誤用或用於其他目的)

我的問題是:這種設計,應用程序必須同意解釋數據的特定方式,是否可以接受?另一方面,我們存儲的數據超出了我們的需求,因爲如果他們不期待回覆,我們絕對不會有回覆地址和日期。

回答

2

我會爲Response_Expected分開一列,就像現在一樣。是的,您可能會有冗餘信息,因爲預期沒有響應時返回地址將爲NULL。

然而,這兩個想法是不同的。以下是您可能需要考慮的一些場景:

  • 未來,您有多種方式可以返回響應。電子郵件只是一個頻道。這會使數據結構複雜化,但邏輯將依賴於單個通道。
  • 您發送一封電子郵件,但由於其他原因它會彈跳或無法傳送。
  • 迴應變得依賴於一些其他標準。他們想要一個響應,但只在某些條件下。

我不擔心數據的重複。我會更多地考慮應用程序的可持續性。

+0

謝謝。這看起來確實是常見的POV:額外的列並不重要,顯式(但非重複)數據更重要。 – Jeremy