我的表具有外键关系:
Users:
id,
has_many posts
Posts:
id,
has_many paragraphs
Paragraph:
id,
String text
我的查询是按帖子的id查看帖子,按段落的id查看段落。我的模式比这复杂得多,但仍然有一个具有特定id的用户对资源的明确所有权。给定一个用户的id,在SQL中是否有任何方法来验证只能对该用户拥有的资源执行查询?
第一次
架构可能会变得很复杂,编写起来很麻烦。有没有内置的SQL解决方案?我用的是SQLite,但是通用的解决方案也可以。
1条答案
按热度按时间wf82jlnq1#
在回答之前,我们需要明确一件事:这里的
sqllite
(或任何其他潜在的数据库引擎)并不知道表中的数据是用户、所有权等等。从DB引擎的Angular 来看,这些是字节,而且只有字节。如果您试图在数据库引擎端解决该问题,唯一的方法是对每个查询的所有权表执行
JOIN
,并过滤掉数据。您需要将带有当前用户ID的参数传递到查询中以最大限度地减少检查:
一种使其更易于管理的流行解决方案是使用存储过程(许多数据库引擎都支持它们)。
另一种方法是在数据库引擎端创建视图,这些视图执行必要的连接,并始终公开一致的列名(如
authorUserId
)以进行筛选。然而,对于大型的现代应用程序或服务,通常在应用程序代码上解决它,而不是在数据库端。