快速高效地检索数据
Retrieve data quickly and efficient
我在 Rails 上使用 Ruby 和 Postgresql 作为数据库。
我的用户订阅了一个计划,根据他们的计划,他们可以使用许多资源,我有一个数据库 table 可以跟踪他们的使用情况。我需要检查它们在多项操作中的使用情况,我想知道是否有处理这些数据(存储和检索)的最佳实践
我的table:
UserStats: id(pk), projects_left, keys_left, user_id
通常在 create actions
上我检索数据,然后在 userstats
上更新数据 table 还有很多地方我只在 select table.
如果资源也存储为数据库表,您可以考虑在插入这些表时创建触发器,如果它们超出限制,这将导致插入失败。
这样您就不需要更新 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;
我在 Rails 上使用 Ruby 和 Postgresql 作为数据库。
我的用户订阅了一个计划,根据他们的计划,他们可以使用许多资源,我有一个数据库 table 可以跟踪他们的使用情况。我需要检查它们在多项操作中的使用情况,我想知道是否有处理这些数据(存储和检索)的最佳实践
我的table:
UserStats: id(pk), projects_left, keys_left, user_id
通常在 create actions
上我检索数据,然后在 userstats
上更新数据 table 还有很多地方我只在 select table.
如果资源也存储为数据库表,您可以考虑在插入这些表时创建触发器,如果它们超出限制,这将导致插入失败。
这样您就不需要更新 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;