2012-08-03 65 views
1

我的問題涉及到一個帶有mysql數據庫的php網站。如何在數據庫中創建動態「類型」

目前在數據庫中,我們有一個「令牌」實體

令牌可保持0或多個「對象」實體和每個對象的類型可以是X,Y,Z的

所以

---------- 
| Token | 
|--------| 

-------------- 
|token_object| 
|   | 
|tokenID  | 
|objectID | 
-------------- 

------------ 
| object | 
|   | 
|objectType| 
------------ 

------------ --------- --------- 
| objectX | |objectY| |objectZ| 
|   | |  | |  | 
------------ --------- --------- 

現在這個工程okish,因爲當我想從一個物體,由於我們的緩存系統的性質,是在當時幾乎總是一個對象,我可以只讓兩個查詢來從數據的數據物體和物體X/Y/Z

(SELECT * FROM object WHERE id = $id) 

switch($objectType) 
case 'objectX': 
    SELECT * from ObjectX WHERE id = $id 
case 'objectY': 
etc etc.. 

但現在我一直在問,讓網站的用戶創建新的對象類型,即對象A/B等

我可以創建一個新的objectXn表爲每個新的對象類型,並通過選擇一個很好的值的objectType將工作

(SELECT * FROM $objectType WHERE blabla) 

但這似乎並不是一個很乾淨的解決方案n,尤其是創建新表格

有沒有更好的解決方案?

值得注意的是,我希望有相對令牌和額外的對象類型的創建將不會發生大量的/幾乎不會有大量的對象

+1

我正在從此刪除PHP標記。雖然你在PHP中實現你的解決方案,但問題的核心是參考MySQL,因此PHP不屬於。 – Matt 2012-08-03 17:18:08

+0

對象表是否都有相同的字段?呃等等,不,我認爲我看到 - 對象具有所有對象通用的字段,而objectX具有X唯一的字段? – 2012-08-03 17:32:43

回答

1

你到底是什麼存儲?它是否需要對它進行復雜的查詢,或者是否需要通過id進行簡單的對象存儲?在後一種情況下,您可以創建一個具有ID,Type和Data的表,其中data是可以在代碼中恢復的序列化對象(例如,將對象存儲爲JSON,並使用存儲器對其進行反序列化類型和數據)。如果這不能滿足您的需求,請多關注一下您的問題。

+0

我需要對對象類型中的數據運行查詢,例如,如果添加了ObjectZZ,哪些字段:價格和貨幣。我希望所有具有幣種的令牌EURO – Xeli 2012-08-03 17:28:59

+0

這種上下文要求您爲每種類型的對象創建表以允許查詢該對象的特定屬性。這是由於關係數據庫的性質造成的,它不能即時創建列。根據您的總體情況,您最好使用NoSQL解決方案(例如MongoDB),因爲這是一個文檔存儲,它允許您在動態創建的對象上的字段上進行查詢,而對性能影響不大。 – 2012-08-03 17:32:15