針對不同數量關係的數據庫設計
我目前正在嘗試設計一個數據庫模型來儲存所有可能的營養數據,但是對於許多產品來說,沒有其他產品那麼多可用的數據,因此許多欄位可能最終成為 NULL 值(我不希望使用任何占位符/預設值,因為我需要能夠區分哪些是實際缺失的)
我發現 PostgreSql 對我來說可能是一個很好的解決方案,因為我不想建構 EAV(實體-屬性-值)表,因為我有過使用它的經驗,它不能很好地擴展。(如果“產品”可以有 0 到 200 個屬性,它會很快進入數千萬行)。
PostgreSql 具有復合類型,您也可以將它們儲存為數組,這使我可以輕鬆地將鍵值對儲存在單個列中,因此可以輕鬆查找與“產品”相關的所有內容,我可以輕鬆地進行連接表之間,並有可用的數據。
現在的問題是:
這是一個好的解決方案,我會面臨什麼樣的障礙,我的問題是否有更好的解決方案?
會有單獨的表格,例如:
CREATE TABLE products ( proteins_id FOREIGN KEY, lipids_id FOREIGN KEY, minerals_id FOREIGN KEY, vitamins_id FOREIGN KEY)
每個外鍵引用一個表,一行中最多有 50 個空值
要麼
CREATE TYPE custom_type ( field_1 INTEGER, field_2 INTEGER ) CREATE TABLE products ( proteins custom_type[], lipids custom_type[], minerals custom_type[], vitamins custom_type[] )
我知道通過找到某種平衡,最佳解決方案可能介於這兩個解決方案之間,但我真的需要一些指示,謝謝你們!:)
編輯:加上另一件要考慮的事情:表格可能需要經常擴展,如果這個過程最不痛苦,那就太好了。
我也面臨與其他表格(例如(食物)“食譜”)相同的問題,因為成分的數量可能非常不同,而且我需要儲存組件的度量/數量。
您所描述的稱為子類型。子類型是一種常見的資料結構,用於非常相似但有一些差異的事物。例如,名為 Clothing 的對象可用於描述多種類型的個人覆蓋物,但 T 恤和短褲具有非常不同的屬性。使用子類型,您可以將所有常見屬性儲存在一個表中,並擁有一個包含不同屬性的相關表。該主表將具有類型表的 FK,該表將指示該對像是哪個子類型表。
實體:服裝 ClothingID ClothingTypeID -> ClothingType 名稱 尺碼 顏色
類型實體: ClothingType ClothingTypeID 名稱
現在對於子類型表。類型表中的每個值都有一個。
實體:TShirt ClothingID(子類型始終具有與父對象相同的主鍵值)SleeveLength ColorType
實體:短褲 ClothingID HasPockets LegLength IsSwimSuit