2014-07-25 78 views
1

我需要將JSON數據保存到Oracle數據庫。 JSON看起來像這樣(見下文)。但它不保持相同的格式。我可能會添加一些額外的節點或修改現有的節點。那麼是否可以動態創建或修改oracle表以添加更多列?我打算用Java來做到這一點。我將創建一個與JSON匹配的Java類,將JSON轉換爲Java對象並將其保存到表中。但是,我如何動態修改Java類?或者用PL/SQL來做這件事會更好嗎? JSON來自移動設備到REST Web服務。如何動態地將JSON轉換爲數據庫表格?

{"menu": { 
    "id": "file", 
    "value": "File", 
    "popup": { 
    "menuitem": [ 
     {"value": "New", "onclick": "CreateNewDoc()"}, 
     {"value": "Open", "onclick": "OpenDoc()"}, 
     {"value": "Close", "onclick": "CloseDoc()"} 
    ] 
    } 
}} 
+0

您無法創建動態類。 –

+2

如果列名稱發生更改並且在不同的對象之間,我不認爲SQL很適合這種動態數據。查看ORM或非SQL DB更自然的適合。 – dandavis

+0

不斷增加和刪除列的要求更接近NoSQL數據庫,如[MongoDB](http://www.mongodb.org/),即像Oracle這樣的關係數據庫。我的建議是改爲考慮這些數據庫。 – lagunex

回答

1

我建議你避免創建新的列,而是創建一個新的表,每個新的列將包含一個條目。我在這裏假設新的列將是菜單項。所以,你會與這些列的「菜單」表格:

id file 

,你將有一個「菜單項」表,該表將包含每個菜單項條目:

id value onclick 

所以不是動態添加列時,您將添加記錄。

+0

這可能是很多嵌套的選擇或連接。緯。 – Pred

0

我在評論中建議將您的方法改爲NoSQL數據庫,如MongoDB。但是,如果您仍然覺得需要使用關係數據庫,那麼EAV model可能會指出您正確的方向。

總之,你將有一個「助手」表,存儲實體具有哪些列及其類型。

您不能修改Java類,但可以像Map一樣定義類並實現添加所需列的邏輯。

Magento,一款PHP產品,在其數據庫中使用EAV。

0

Mongodb可能是你最好的選擇,或者你可能有一個大的TEXT字段,只提取你可能搜索的字段。

但是,您可以爲額外的標準化數據創建TABLE併爲ALTER TABLE添加一列。後者可能特別昂貴。

相關問題