2012-04-16 71 views
0

我正在使用Ruby on Rails和設計進行身份驗證。我有一個用戶(客戶)模型和一個商業模型。我希望用戶(客戶)通過特定業務註冊並屬於特定業務。一個企業有很多用戶(客戶),但一個用戶只屬於一個企業。我最終希望有企業能夠使用他們自己的域的子域來對應他們自己的ID,但現在我已經到了這一點,我不知道如何處理這個問題..我應該/可以使用多個數據庫嗎?

老實說我仍然在讀高中,我不知道如何將每件事物與這樣的事情結合在一起。所以我正在計劃將這個應用程序授權給企業(在我開發這個產品之前已經有一些已經付費的產品)。每個企業的數據都需要與其他企業分開。有些企業根本沒有域名,所以我將不得不在服務器上使用子域名。有些企業確實有一個網站,所以我想通過他們的業務領域使用一個子域。

我現在認爲使用多個數據庫肯定會更好..老實說,我對數據庫結構的知識非常有限。我相信有可能運行單獨的個人應用程序,我一直認爲這可能是最好的方式來推出這個。也許最容易開發/維護?

所以我的問題是什麼是運行多個數據庫與運行單獨的個別應用程序的權衡?我在哪裏可以找到更多關於如何實際執行此操作的信息?也有人可以讓我進入正確的方向如何轉發這些領域或我必須做的?

另請請評論,如果我的問題不夠清楚......並對不起,這是如此漫長的大聲笑。

回答

2

一旦你走上多個數據庫的道路,你不能輕易回去,所以你最好有一個很好的理由去做。除非你有嚴重的擴展問題,否則最好儘可能延遲這個決定,而是使用標準關係來分割你的數據庫。

Rails很容易做到這一點,因爲您可以將範圍應用於任何事情。例如,您創建一個業務模型,然後不是直接獲取其他對象,而是始終在特定的上下文中執行此操作。在實踐中,這看起來像:

@orders = @business.orders.paginated 

你可以讓你所有的父類的「面向企業的」控制器後裔將使用一個before_filter所以在正確的@business模型加載,這並不一定是複製在許多不同的控制器中。

如果您確實想要拆分數據庫,您可以通過根據business_id或其他派生關係分離表來實現。

我發現這個作品對於大多數應用程序都非常好,並且可以很好地擴展。請記住,縮放的第一步不是共享,而是複製,因爲擁有大量只讀副本可以大幅提高讀取性能,而不會使應用程序在內部複雜化。

相關問題