Postgresql

規範化或不規範化

  • March 26, 2018

總的來說,我理解標準化通常是有益的,即使加入成本也是如此。然而,我最近遇到了一個有趣的困境。

如果數據是重複的,但不太可能改變怎麼辦。這是可能的,但我不會預料到。

我有一個nutrients帶有一unit列的表格,單位是g, kg,ug等。

我看不到這些價值觀每一次都在變化。

我很想將它們作為一列放在表中,而不是規範化並擁有一個units表並使用外鍵並且在從nutrients表中獲取一行時必須加入。同時,我知道一般來說,即使有加入幣,我們也應該正常化。

我應該做什麼(為什麼)?

冗餘數據(壞)和巧合重複的數據(不壞)之間是有區別的。規範化是一種用於避免插入、更新和刪除異常的技術。這並不是要消除一條數據的每一次重複。靜態數據不會從規範化中受益。

以標準化縮寫形式表示的度量單位不是您需要標準化的數據。

可以這樣想:如果要將度量單位標準化為單獨的表,則需要從nutrients表到units表的外鍵。計量單位程式碼是否是唯一的(可能是)。因此,它是您表的候選鍵。units如果它是候選鍵,可以units將其用作.nutrients

最終結果是,nutrients即使您已將單位標準化,您的表中仍然有您的度量單位程式碼。

這是您想要創建units表的時候。如果您有其他謂詞(列)依賴於單位程式碼,但不依賴於營養素。例如,aunit_type或轉換因子到相同類型的基本單位(克表示重量等)。這將是表中的傳遞函式依賴nutrients因此不屬於那裡。

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