2016-08-02 65 views
0

說我有產品的一個簡單的表: 標識,產品代碼,價格,說明等SQL數據庫設計 - 獨特的行很小的比例

而且我有10,000種產品......但他們中的100需要聲音樣本(例如他們是木琴)。 我想在數據庫中存儲產品是否有聲音樣本。

因此,將產品表中存儲爲「has_sound」布爾值(true或false)coloumn,還是作爲單獨列表列出所有產品ID與聲音?

存儲在產品表中意味着絕大多數將只有「has_sound = false」,這似乎有點浪費。 但是,僅僅存儲「有聲產品」列表對我來說似乎也有點「錯誤」。

非常感謝:)

+1

是的,你是對的,你們兩個都在思考的方式是不合適的,因爲在未來你可能有檢查「has_book」什麼的,那麼你不能一次又一次地維護表或字段用於一些特定的條件。相反,我認爲使用像「product_type」或類似的字段可能會有所幫助。您可以定義「product_type」的枚舉。 –

回答

1

你有10,000行。

即使您選擇低效的4字節字段大小,您也可以通過向產品表中添加一個字段來查看磁盤上的所有〜40k。相比之下,具有(int,tinyint)字段的空innodb表在磁盤上大約爲100k(加上用於保存表元數據的額外RAM開銷)。用100條記錄填充該表沒有任何區別,因爲所有內容都適合在一個分配頁面中。

這些開銷都不是遠程接近性能的考慮。

做什麼使得代碼清晰的,最簡單,最維護了誰走來(在這種情況下是存儲在產品上表的額外字段)的下一個開發人員。

0

新表格更正確的關係。如果是我,我會有一個兩列表格,產品ID和一個帶有聲音樣本的BLOB,用於那些有聲音樣本的產品。雖然你可以在桌子上有一個布爾值(或可爲空BLOB)分裂出來可以更好地分配和周圍的聲音樣本附加數據(不同的採樣格式,多八度/音高/票據或其他)保持在其下一次正確的地方聲音。

正如列維雖然說,「最好的」是最易於維護,因爲會在這個規模沒有顯著的性能或浪費的問題。