我目前正在尝试学习 Ruby On Rails,因为我是一名长期的 PHP 开发人员,所以我正在建立自己的社区,比如页面。
我已经走了很远,并使用 MySQL 制作了用户模型等。
但后来我听说了 MongoDB,并对其进行了更多研究,我发现它有点好。
所以我已经设置好了,我正在使用 mongomapper 来连接 rails 和 MongoDB。
我现在将它用于网站上的新闻页面。
我还为每个用户提供了一个个人资料页面,其中包括他们自己的留言簿,以便其他用户可以访问他们的个人资料并向他们写一些信息。
我现在的想法是将用户模型从使用 MySQL 更改为开始使用 MongoDB。
我可以先展示如何为每个用户设置模型。
用户模型:
class User < ActiveRecord::Base
has_one :guestbook, :class_name => "User::Guestbook"
留言板模型模型:
class User::Guestbook < ActiveRecord::Base
belongs_to :user
has_many :posts, :class_name => "User::Guestbook::Posts", :foreign_key => "user_id"
然后留言簿帖子模型:
class User::Guestbook::Posts < ActiveRecord::Base
belongs_to :guestbook, :class_name => "User::Guestbook"
为了我自己的方便,我已经这样划分了它,但是现在当我要尝试迁移到 MongoDB 时,我不知道如何制作表格。
我想为每个用户创建一个表,并在该表中为所有留言簿条目创建一个“列”,因为 MongoDB 可以有一个 EmbeddedDocument。我想这样做,所以我只为每个用户准备一张桌子,而不像现在我拥有三张桌子只是为了能够拥有一个留言簿。
所以我的想法是这样:
用户模型:
class User
include MongoMapper::Document
one :guestbook, :class_name => "User::Guestbook"
留言板模型模型:
class User::Guestbook
include MongoMapper::EmbeddedDocument
belongs_to :user
many :posts, :class_name => "User::Guestbook::Posts", :foreign_key => "user_id"
然后留言簿帖子模型:
class User::Guestbook::Posts
include MongoMapper::EmbeddedDocument
belongs_to :guestbook, :class_name => "User::Guestbook"
但后来我可以想到一个问题.. 当我只想获取用户信息(如昵称和生日)时,它必须获取所有用户的留言簿帖子。而且,如果每个用户在留言簿中都有上千个帖子,那么系统将获得非常多的信息。还是我错了?
你认为我应该以其他方式吗?