2010-04-09 32 views
8

我在學習Rails,我的實驗的目標是實現類似於Zoho Creator,Flexlist或Mytaskhelper的應用程序,即用戶可以創建自己的數據庫模式和視圖的應用程序。追求這個最好的策略是什麼?如何在Rails中創建用戶可定製的數據庫(如Zoho creator)?

我看到了關於Entity-Attribute-Value的一些信息,但我不確定它是最好的策略還是Rails支持它。

如果在Rails中有關於類似項目的任何教程,那就太棒了。

也許它不是學習新語言和框架的最簡單的明星,但它會是我長期以來打算做的事情。

回答

9

你最好的選擇是MongoDB。這很容易學習(因爲查詢語言是JavaScript)並且它提供了一個無模式數據存儲。我將爲每個定義表單結構的表單創建一個文檔。然後,無論何時用戶提交數據,都可以將數據放入通用結構中,並根據表單的名稱將其存儲在集合中。在MongoDB集合中就像表格一樣,但是你可以隨時創建它們。您也可以即時創建索引來加速搜索。

您試圖解決的問題是MongoDB面向文檔的數據庫的主要用例之一。還有其他幾個面向文檔的數據庫,但在我看來,MongoDB目前擁有最好的API。

MongoDB Ruby tutorial一個閱讀,我相信你會想嘗試一下。

不要使用關係數據庫來做到這一點。動態創建表格會很悲慘,並且不僅會危害系統安全,還會影響用戶的數據。您可以通過創建一個跟蹤表單結構的複雜模式來避免創建表,並且每個字段類型都需要自己的表。 Rails使這種多態關聯的痛苦減輕了,但它絕對不美觀。

0

應該可以通過將DDL語句直接發送到服務器或通過動態生成遷移來生成數據庫表。然後你可以使用Class.new(ActiveRecord :: Base)do ... end生成相應的ActiveRecord模型。原則上這應該起作用,但必須小心處理。但這對初學者來說絕對沒有工作。

第二種解決方案可能是使用MongoMapperMongoDB。我的想法是使用一個集合來存儲你的表的行,並且由於MongoDB的模式較少,你可以簡單地添加屬性。

0

使用像mongodb或couchdb這樣的文檔存儲將是最好的方式,因爲它們是無模式的。

0

使用EntryAttributeValue可讓您將任何模式數據存儲在一定數量的表中,但是,由此產生的性能影響和維護問題可能不值得。

或者,您可以將數據存儲在XML中,並生成XML模式以進行驗證。

所有「通用」解決方案都會遇到外鍵或其他約束問題,因此您無需在存儲之前完成內存中的所有驗證。

相關問題