快速有效地检索数据

时间:2015-01-06 11:59:49

标签: ruby-on-rails postgresql ruby-on-rails-4

我使用Ruby On Rails和Postgresql作为数据库。

我的用户订阅了一个计划,根据他们的计划,他们允许使用多个资源,我有一个数据库表,可以跟踪他们的使用情况。我需要检查它们在多个操作中的用法,我想知道是否有最好的做法来处理这些数据(存储和检索)

我的桌子:   UserStats: id(pk), projects_left, keys_left, user_id

通常在create actions我检索数据,然后更新userstats表上的数据,还有很多地方我只在桌面上选择。

1 个答案:

答案 0 :(得分:1)

如果资源也存储为数据库表,您可以考虑在插入这些表时创建触发器,如果​​超出限制,将导致插入失败。

这样您就不需要更新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;