Database-Design

為什麼我們不應該允許 NULL?

  • February 22, 2022

我記得讀過一篇關於數據庫設計的文章,我還記得它說你應該有 NOT NULL 的欄位屬性。我不記得為什麼會這樣。

我所能想到的似乎是,作為應用程序開發人員,您不必測試 NULL可能不存在的數據值(例如,字元串的空字元串)。

但是對於日期、日期時間和時間(SQL Server 2008),您會怎麼做?你必須使用一些歷史性的或觸底的日期。

對此有什麼想法嗎?

我認為這個問題措辭不當,因為措辭暗示您已經決定 NULL 不好。也許您的意思是“我們應該允許 NULL 嗎?”

無論如何,這是我的看法:我認為 NULL 是一件好事。當您僅僅因為“NULL 不好”或“NULL 很難”而開始阻止 NULL 時,您就開始編造數據。例如,如果你不知道我的出生日期怎麼辦?在你知道之前你會在專欄裡放什麼?如果您像很多反 NULL 的人一樣,您將輸入 1900-01-01。現在我將被安置在老年病房,可能會接到當地新聞台的電話,祝賀我長壽,問我長壽的秘訣等等。

如果可以在可能不知道列值的情況下輸入一行,我認為 NULL 比選擇一些任意標記值來表示它是未知的事實更有意義 - 其他人將必須已經知道,逆向工程,或四處詢問以弄清楚這意味著什麼。

但是,有一個平衡點 - 並非數據模型中的每一列都應該可以為空。表單上通常有可選欄位,或者在創建行時不會收集的資訊片段。但這並不意味著您可以推遲填充所有數據。:-)

此外,使用 NULL 的能力可能會受到現實生活中的關鍵要求的限制。例如,在醫學領域,知道為什麼一個值是未知的可能是生死攸關的事情。心率為 NULL 是因為沒有脈搏,還是因為我們還沒有測量?在這種情況下,我們是否可以將 NULL 放在心率列中,並在註釋或不同的列中添加 NULL-because 原因?

不要害怕 NULL,但要願意學習或指示何時何地應該使用它們,以及何時何地不應該使用它們。

引用自:https://dba.stackexchange.com/questions/5222