2012-07-11 73 views
0

讓說我有一個表用戶具有以下字段:MySQL的連接使用情況

id 
username 
email 
hobbies 

我有另一個表稱爲愛好存儲有關每個愛好的具體信息:

name | unique 
created 
type 
summary 

現在通常會有人通過創建多對多關係和連接表來解決此問題,請將其稱爲user_hobby

user_id 
hobby_name 

我嘗試做不同的是使用存儲愛好名的序列化陣列的用戶表下的愛好場。

因此,當我想要獲取用戶的愛好列表,而不是進行連接時,我會這樣做。

$array = $user->fetchHobbies()->toArray(); 
$hobbies = Hobbies::findByNames($array); 

性能方面,哪個更好?

回答

1

性能明智,它更好地保持它在規範化的數據庫結構,並具有正確的索引。

原因是,如果您想要說找到所有具有「足球」愛好的用戶,您需要選擇每個用戶並反序列化他們的興趣數據,或者在該列上運行匹配的通配符like對大數據來說會很慢。

+0

好吧,這是有道理的。我的教授向我提到,在大規模的應用程序中,關係數據庫結構將會崩潰。從那時起,我的團隊一直試圖設計一個模式,將這些實體放在一張表中。 – shiva8 2012-07-11 02:19:44

+0

當處理大規模應用程序時,有很多選項,將數據序列化到一個字段不是其中的一個。但是,您應該考慮非規範化,集羣,高性能硬件和/或面向文檔的數據庫。 – Petah 2012-07-11 02:25:31