我正打算使用Ruby on Rails创建一个应用程序,希望可以使用多个数据库。这基本上是一个会为每个用户拥有多个公司的会计应用程序。我想要为每个公司创建一个数据库。
我找到了这篇文章:http://programmerassist.com/article/302 但我想读更多关于这个问题的看法。我必须在MySQL和PosgreSQL之间做出决定,哪个数据库可以更好地解决我的问题。
我正打算使用Ruby on Rails创建一个应用程序,希望可以使用多个数据库。这基本上是一个会为每个用户拥有多个公司的会计应用程序。我想要为每个公司创建一个数据库。
我找到了这篇文章:http://programmerassist.com/article/302 但我想读更多关于这个问题的看法。我必须在MySQL和PosgreSQL之间做出决定,哪个数据库可以更好地解决我的问题。
before_filter :set_app
def set_app
current_app = App.find_by_subdomain(...)
schema = current_app.schema
set_schema_path(schema)
end
def set_schema_path(schema)
connection = ActiveRecord::Base.connection
connection.execute("SET search_path TO #{schema}, #{connection.schema_search_path}")
end
def reset_schema_path
connection = ActiveRecord::Base.connection
connection.execute("SET search_path TO #{connection.schema_search_path}")
end
现在已经过去了一段时间,我们决定使用PostgreSQL模式来创建多租户应用程序。我有一个名为common的模式,用于存储相关数据。
# app/models/organisation.rb
class Organisation < ActiveRecord::Base
self.table_name = 'common.organisations'
# set relationships as usual
end
# app/models/user.rb
class User < ActiveRecord::Base
self.table_name = 'common.users'
# set relationships as usual
end
关于迁移,我使用了这个优秀的教程。http://timnew.github.com/blog/2012/07/17/use-postgres-multiple-schema-database-in-rails/ 使用它,这比我在其他地方看到的甚至是 Ryan Bates 在 railscasts 上做的方式都要好。
当创建一个新组织时,会创建一个名为该组织子域名的新模式。过去我曾经读到过不建议使用不同的模式,但这取决于你所做的工作,这个应用几乎没有社交组件,所以很适合。
不,你不应该使用多个数据库。
但我不确定该给你什么建议,似乎你对数据库设计有一些基本的误解,你可能需要先学习数据库的基础知识,然后再深入研究。
你最有可能只需要在表中添加一个“公司ID”类型的列,以标识特定记录属于哪个公司。