2012-10-15 28 views
0

我正在做一些PHP/MySQL的工作,並開始想知道什麼會更有效,什麼方法會有更好的數據完整性。保存ID在另一個表或在一個字段中的數組中的記錄

我從來沒有使用方法#2,但我已經看到它用於像CMS或電子商務系統。我經常使用#1。

示例:在我的系統中創建「任務」時,我需要爲其分配1個或多個用戶。


方法#1 在該方法我將具有這將同時存儲TASK_ID和USER_ID的表。我會查詢此表以獲得關係。


方法#2 在該方法我會在「users_assigned」的任務表中的列此將存儲的序列化陣列,其當我需要我會解序列化。例如

$data = array('John', 'Jack', 'Jill'); 
// after serialization it would look like... 
// a:3:{i:0;s:4:"John";i:1;s:4:"Jack";i:2;s:4:"Jill";} 

什麼方法最適合存儲在數據庫中這種類型的數據?

回答

1

如果您沒有很強的反對非規範化的理由(將數據複製到序列化數組中,破壞了常規形式的規則),我會堅持使用單獨的表。提取有點複雜,需要連接,但是您可以更好地控制數據庫中的關係完整性(外鍵),您的數據組織得更好,定義更清晰。

看看這篇文章http://backchannel.org/blog/friendfeed-schemaless-mysql非常規情況下的非規範化。然而,在他們的情況下,他們不會獲取任何額外的鏈接數據到行集(在你的情況下,你可能想要加入關於序列化數組中用戶的更多信息)。

+0

謝謝我同意,但我只是想看看我是否失去了什麼。我一直想知道爲什麼人們使用方法#2 ... – Mediabeastnz

+0

希望我知道。有人設計了這樣一個系統的一部分,這使得它成爲尋找數據的噩夢。 – Kickstart

+1

@Kickstart我同意,使用這些數據可能是一個真正的痛苦。由於您無法控制數據庫中的數據完整性,因此您必須在應用程序中執行此操作。如果它不存在,你會遇到一些麻煩。 – vvondra

0

方法2是一個壞主意。幾乎無法阻止你加入表格(這仍然是可能的,但只有用你的代碼來證明它可以完成而不是實際使用)。

相關問題