Postgresql

具有許多空值的表 VS 許多表

  • November 29, 2019

基本上我的數據庫知識水平使我能夠創建、選擇、刪除和一些簡單的事情。當談到性能設計時,我的知識絕對是 0。

所以我的問題是假設我有一張表格來記錄水中的物質:

在此處輸入圖像描述

這裡我只顯示 7 列,可能超過 100 列。正如您在此處看到的,那些空白欄位表示研究人員沒有對這些欄位進行測試。研究會選擇其中的幾個,所以基本上這種設計會留下很多空欄位,佔用很多空間。

我是否應該將大表規範化為較小的表,只有在輸入數據時才有條目?這個動作叫做標準化,對嗎?但是,如果我想在報表中顯示數據,這種方式將需要我加入這麼多表。

我正在使用 PostgreSQL,但我找不到查詢可以線上連接的表的最大限制。但是我有一種感覺,加入太多的表是一個緩慢的操作。我應該保留包含空值的完整表還是應該將其分解為較小的表?或者有更好的方法來做到這一點,或者你會怎麼做?

在此處輸入圖像描述

編輯:

在此處輸入圖像描述

編輯2:

在此處輸入圖像描述

據我所知,“水”是一種食譜。

對於這樣的配方,您要記錄 a) 添加了哪些添加劑和 b) 結果是什麼。

這是兩個實體,配方和添加劑。兩者都與一個關係屬性(即數量)具有多對多關係。配方的結果當然是配方的屬性,而不是配方和添加劑之間的關係之一。重要的是整個混合物。

一個典型的標準化解決方案是三個表。

一為添加劑。

CREATE TABLE additive
            (id serial,
             name text,
             PRIMARY KEY (id));

另一個食譜。

CREATE TABLE recipe
            (id serial,
             name text,
             drinkable boolean,
             dangerous boolean,
             PRIMARY KEY (id),
             CHECK (NOT drinkable
                     OR NOT dangerous));

注意:我添加了一個檢查約束,即不能將被視為危險的收據標記為可飲用。

還有一張連結配方添加劑的表格。

CREATE TABLE recipe_additive
            (recipe integer,
             additive integer,
             amount integer NOT NULL,
             PRIMARY KEY (recipe,
                          additive),
             FOREIGN KEY (recipe)
                         REFERENCES recipe
                                    (id),
             FOREIGN KEY (additive)
                         REFERENCES additive
                                    (id));

這是最好的主意,

在此處輸入圖像描述

是否危險或可飲用取決於數量和物質。這根本不會被儲存,因為它是計算出來的。

如果您願意,您可以將門檻值放在帶有物質的表格上。我還不清楚某些東西怎麼可能是“危險的”和“可飲用的”。

“可飲用”的名稱通常也是“可飲用的”,對吧?

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