我知道這是超基本的,但這是一個我一直持有的假設,並且想要驗證它是否正確(通常,具體針對各種實現的詳細信息)關於如何將外鍵數據存儲在SQL中的問題
比方說,我有一個表格,其中有一個文本列「水果」。在該專欄中,只有四個值中的一個出現:梨,蘋果,香蕉和草莓。我有一百萬行。
而不是每個重複數據(平均)四分之一百萬次,如果我將它提取到另一個具有水果列和只有這四行的表中,然後將原始列作爲外鍵,是否它節省空間?
我假設四個水果名稱只存儲一次,而且現在有數百萬行有指針或索引或者對第二個表的某種引用。
如果我的行值比短的水果名稱長,我認爲節省/優化更大。
想象一個引用類型變量3GL,如C#.NET:它的值在內存中的一個位置退出,但可以有許多引用變量,它們只是指向該位置的整數(或其他)指針。同樣的原則可以應用於DBMS:邏輯上,FK中的兩個表都將水果作爲文本存儲,但在封面之下,文本只存儲一次,每個表物理地僅存儲一個指向相同值的整數(或其他)指針。 mySQL會這樣做嗎?我認爲這就是提問者所掌握的。 – onedaywhen
我不會將mysql的數據存儲實踐與編程語言進行比較。只存儲一個副本是有意義的,但外鍵不是引用。他們只是一個像其他任何其他字段一樣的字段,其中包含的數據與另一個表中的等效字段/數據相匹配。畢竟,在大桌子上放置外鍵幾乎是瞬間的。如果它是一個參考,那麼現在參考消失後,DBMS將不得不復制真實數據。 –