Ruby on rails 快速高效地检索数据

Ruby on rails 快速高效地检索数据,ruby-on-rails,postgresql,ruby-on-rails-4,Ruby On Rails,Postgresql,Ruby On Rails 4,我使用RubyonRails和Postgresql作为数据库 我的用户订阅了一个计划,根据他们的计划,他们被允许使用大量资源,我有一个DB表,用于跟踪他们的使用情况。我需要检查它们在多个操作中的使用情况,我想知道是否有处理这些数据(存储和检索)的最佳实践 我的桌子: UserStats:id(pk)、项目左、键左、用户id 通常在创建动作< /C> >我检索数据,然后更新关于 USESTATS表的数据。还有很多地方我只是在表上选择一个。 < P>如果资源也被存储为数据库表,您可以考虑在这些表上创

我使用RubyonRails和Postgresql作为数据库

我的用户订阅了一个计划,根据他们的计划,他们被允许使用大量资源,我有一个DB表,用于跟踪他们的使用情况。我需要检查它们在多个操作中的使用情况,我想知道是否有处理这些数据(存储和检索)的最佳实践

我的桌子:
UserStats:id(pk)、项目左、键左、用户id


<>通常在<代码>创建动作< /C> >我检索数据,然后更新关于<代码> USESTATS表的数据。还有很多地方我只是在表上选择一个。

< P>如果资源也被存储为数据库表,您可以考虑在这些表上创建一个触发器,如果这些表会导致插入失败。超过他们的极限

这样,您就不需要更新UserStats,只需存储它们允许的最大值

我相信它不太容易出错,处理删除时不需要额外的代码,并允许其他应用修改数据库

例如:


你的问题有点宽泛,你能举几个例子说明你想要实现什么吗?
CREATE OR REPLACE FUNCTION check_limits_projects(int user_id) RETURNS TRIGGER AS
DECLARE
   my_projects_count INT
   my_project_limit INT
BEGIN
   SELECT count(*) INTO my_projects_count FROM projects WHERE user_id = NEW.user_id
   SELECT projects_left INTO my_projects_limit FROM UserStats WHERE user_id = NEW.user_id
   IF (my_project_count >= my_project_limit) THEN
       RETURN FALSE
   END IF
   RETURN NEW
END

CREATE TRIGGER 'limit_check' BERFORE INSERT ON projects;