2016-01-23 71 views
0

我正在爲一個網站設計一個MySQL架構,允許訪問者首先查看產品列表(瀏覽或搜索)並查看每個產品的詳細信息。列表視圖中僅顯示某些字段,查看詳細信息時會顯示更多信息,並提供一些相當大的列數據(例如產品說明)。這個設計很常見。我想知道什麼是存儲產品信息的好方法。數據庫設計中的一對一主從關係

一個選擇是隻有一個PRODUCT表。查看列表將選擇一個字段的子集,比如名稱,價格和主要產品圖片,但不包括其他類似描述的字段,比如VARCHAR(2000)。我的問題是,我做了一個select name, price, main_pic from product where ...,描述字段是否也會被MySQL引擎加載到內存中,從而消耗更多空間?

如果MySQL確實將其他未選中的字段加載到內存中,或者只是想在其他表中保留詳細信息,可能會有一個PRODUCT_DETAIL表。這會是一個很好的設計嗎?我感覺有點奇怪,因爲PRODUCTPRODUCT_DETAIL然後將具有相同的主鍵,並且由於兩者之間的主 - 細節關係,PRODUCT_DETAIL的主鍵也將是引用PRODUCT的主鍵的外鍵!任何人都使用這種設計?

回答

0

這個問題是相似的,可以幫助你。

問:select * vs select column

而且是也用於主從式的關係,是設計一個好辦法。

+0

非常感謝指針。我已閱讀完討論。但是,我不完全清楚結論是什麼。至於'select *'vs'select column'的開銷,我看到了什麼:1)磁盤I/O開銷是相同的,因爲數據庫引擎總是爲每一行提取整個原子元組2) 'select column'的網絡I/O開銷就會減少3)對內存I/O開銷沒有明確的結論,但我的理由應該與服務器端相同,因爲讀取的是相同的元組,但是'在客戶端選擇列' – hanaZ

+0

[鏈接]中的相關討論(http://stackoverflow.com/questions/1125004/which-is-more-efficient-multiple-mysql-tables-or-one-large-table) 。即使存在一對一的關係,分離表似乎也是有意義的。在兩個表設計的情況下,兩個表都應該使用'product_id'作爲主鍵,還是'PRODUCT_DETAIL'使用'product_detail_id'作爲主鍵鍵並將'product_id'作爲外鍵?如果兩者都使用'product_id'作爲主鍵,那麼當OR映射工具保存記錄時,如何確保它們與使用自動生成的'product_id'的相同產品完全相同? – hanaZ

+0

您可以有一列作爲主鍵以及外鍵。所以不需要在* product_detail *表中自動增加。只需像插入單獨的外鍵一樣插入其值即可 –