2011-09-07 72 views
1

我正在Apache服務器上用PHP構建一個Web應用程序。最佳數據存儲 - 三重存儲/關係數據庫/其他?

該應用程序包含大量有關人員的可選數據。根據人的類別(一個人可以在五類中),他們可以選擇指定或不指定數據:家庭住址(== 5個街道,城市,國家,...),工作地址(再5個字段),年齡,電話號碼....當然,應用程序還存儲一些額外的數據(創建,上次更新,用戶名,密碼,用戶級別...)。

該應用程序的當前版本/過時版本在「users」表中有86個字段,並且(取決於人的類別)擴展爲具有另外23個字段(1-1關係)的附加表。

所有這些都存儲在Postgresql數據庫中。

我在想這是否是處理這類數據的最好方法。大多數記錄都有(很多)空字段,使數據庫變大,查詢變慢。是否值得考慮像Triple Store這樣的其他解決方案,還是我擔心太多,我應該保持當前的設置?這似乎很奇怪,只是爲了網站的每個新用途而將表添加到表中。另一方面,我有這樣的印象:三重商店並不常見。任何指針或建議如何處理?

我讀過Toby Segaran和其他人的「Programming the semantic web」,但從這本書中我得到的印象是三重商店和RDF的主要優勢是通過網絡交換信息(這不是我的應用程序的目標)

回答

0

大多數記錄有(很多)空字段

這意味着你的數據還遠遠沒有恢復正常。

該應用的電流/過時的版本具有86個字段中的「用戶」表,並且(依賴於該人的類別),擴展了產生額外表與另一個23個字段(1-1關係)。

確實,是的,距離normalized距離很遠。

如果你有一個很好的理由擺脫你剛纔的位置,那麼第一步將更好地構建你的數據。 即使您選擇移動到不同類型的DBMS例如noSQL或對象數據庫。

這不僅可以節省DBMS中的空間,還可以更快地檢索數據並減少需要編寫的代碼量(例如,您可以重複使用相同的代碼來維護家庭地址,例如維護工作地址如果你有一個'地址'表和一個標記地址類型的字段)。

網絡上有很多資源(除了上面的維基百科鏈接)描述瞭如何應用規範化規則(在1,2和3之後它開始有點牽扯 - 但是如果你能掌握這些規則,那麼你完全有能力承擔大部分任務)。

+0

想知道你是否正確,它沒有正常化。我存儲關於某人的各種數據(眼睛顏色,頭髮顏色,薪水,組織中的等級,has_badge,has_companycar,_...等)。是的,你可以把所有可以「擁有」的項目放在一個表中,並且在連接用戶和「屬性」之間放置一箇中間表,但我不確定這會加快查詢的速度(相反) 。 – user410932

+0

雖然我同意有一個表「屬性」來存儲可選數據,但它似乎正在朝着三重商店的方向發展......(其中所有字段都以「屬性」或「對象」因爲他們會這樣稱呼它) – user410932