假設我有一個名爲'child'的表,其中包含引用另一個名爲'parent'的表的外鍵。如果父表中包含我經常希望從子表進行SELECT操作時要訪問的列值,最好是在外鍵上JOIN表或將我經常從父表訪問的列存儲在子表中第二次。存儲相同的信息兩次或加入外鍵?
有時我還有第三個「孫子」表引用子表,並希望來自所有3個表的信息的混合。一個三聯JOIN似乎是我過分複雜化了。
我覺得有一個更好的方法來解決這個問題。如果任何人有關於此主題的建議或一些好的資源,請告訴我。
假設我有一個名爲'child'的表,其中包含引用另一個名爲'parent'的表的外鍵。如果父表中包含我經常希望從子表進行SELECT操作時要訪問的列值,最好是在外鍵上JOIN表或將我經常從父表訪問的列存儲在子表中第二次。存儲相同的信息兩次或加入外鍵?
有時我還有第三個「孫子」表引用子表,並希望來自所有3個表的信息的混合。一個三聯JOIN似乎是我過分複雜化了。
我覺得有一個更好的方法來解決這個問題。如果任何人有關於此主題的建議或一些好的資源,請告訴我。
這個問題是基於不成熟的優化,這是不好的。
你說的是denornalization,應該這樣做只是因爲存在一個真實而迫切的性能問題。當你的想法聽起來很誘人,它幾乎總是一個壞主意,因爲:
你會如何推薦這種方法呢? – user2923125
將屬於父表中的數據存儲在父表中;將屬於子表中的數據存儲在子表中;將屬於孫表中的數據存儲在孫表中。當您需要訪問信息時,請加入表格。在正常的事件過程中,只需要兩個連接來連接三個(父,子,孫)表。 –
您可以創建一個視圖,將連接打包起來,使它們看起來像應用程序的普通表(對於選擇查詢) – Bohemian
正確的答案是避免冗餘並將數據存儲在一個地方,除非你有一個非常好的理由。你的理由聽起來不是很好。 –