我正在使用 Ruby on Rails 3.2.2 和 MySQL。我想知道在与一个类相关的数据库表中存储与它们实例的每个“组合”相关的其他两个类的所有记录是否是“可取的”/“可取的”。
也就是说,我有User
和Article
模型。为了存储所有用户文章授权对象,我想实现一个ArticleUserAuthorization
模型,以便给定 N 个用户和 M 篇文章,有 N*MArticleUserAuthorization
条记录。
这样做,我可以声明和使用ActiveRecord::Associations
如下:
class Article < ActiveRecord::Base
has_many :user_authorizations, :class_name => 'ArticleUserAuthorization'
has_many :users, :through => :user_authorizations
end
class User < ActiveRecord::Base
has_many :article_authorizations, :class_name => 'ArticleUserAuthorization'
has_many :articles, :through => :article_authorizations
end
但是,上述存储所有组合的方法将导致包含数十亿行的大数据库表!!!此外,理想情况下,我计划在创建一个或一个对象时创建所有授权记录(也就是说,我计划一次创建所有前面提到的“组合”,或者更好的是,在“延迟”批次中......无论如何,这个过程会创建其他数十亿个数据库表行!!!)并在销毁时反之亦然(通过删除数十亿个数据库表行!!!)。此外,我计划在更新或对象时立即读取和更新这些行。User
Article
User
Article
所以,我的疑问是:
- 这种方法“可取”/“可取”吗?例如,可能会出现什么样的性能问题?或者,管理/管理具有非常大数据库表的数据库是一种不好的“方式”/“处方”?
- 在我的情况下,我可以/可以/应该如何进行(也许,通过“重新思考”如何以更好的方式处理用户授权)?
注意:我会使用这种方法,因为为了在检索或对象时只检索“授权对象” ,我认为我需要“原子”用户授权规则(即每个用户和文章对象的一个用户授权记录),因为系统不基于“admin”、“registered”等用户组。因此,我认为表的可用性避免了在每个检索到的对象上运行与用户授权相关的方法(注意:这些方法涉及一些可能会降低性能的 MySQL 查询 - 请参阅我以前的问题以获取示例“授权”方法实现)通过“简单地”访问/加入User
Article
ArticleUserAuthorization
ArticleUserAuthorization
表以便仅检索“用户授权”对象。