假设我有用户。这些用户可以访问多个项目。因此,一个项目也可以允许多个用户。
因此,我为四个表建模。用户(by_id),项目(by id),projects_by_user_id和users_by_project_id。
----------- ------------ -------------------- ------- ------------- | 用户| | 项目| | projects_by_user | | users_by_project | | --------- | | --------- | | ------------------ | | ------------------ | | ID K | | ID K | | user_id K | | project_id K | | 名称| | 名称| | project_id C | | user_id C | ----------- ------------ | project_name S | | user_name S | -------------------- --------------------
因此,将user_name存储在users_by_project中,将projet_name存储在projects_by_user表中以进行查询。
我的问题是,当用户更新project_name时,这当然会更新projects表。但是为了数据一致性,我还需要更新projects_by_user表中的每个分区。
据我所知,这只能通过从users_by_project表中查询所有用户并为每个用户进行更新来实现。
如果没有先读取大量数据,还有什么更好的方法吗?
我不明白为什么你需要四个桌子。您的用户和项目表可能包含所有数据。
如果您按以下方式定义表:
CREATE TABLE users (
user_id int PRIMARY KEY,
name text,
project_ids list<int> );
CREATE TABLE projects (
project_id int PRIMARY KEY,
name text,
user_ids list<int> );
然后,每个用户将具有他们有权访问的项目ID的列表,并且每个项目将具有对其具有访问权限的用户的列表。
要向用户1添加对项目123的访问,请运行:
BEGIN BATCH
UPDATE users SET project_ids = project_ids + [123] WHERE user_id=1;
UPDATE projects SET user_ids = user_ids + [1] WHERE project_id=123;
APPLY BATCH;
要更改项目名称,您只需执行以下操作:
UPDATE projects SET name = 'New project name' WHERE project_id=123;
为简单起见,我将id字段显示为int,但通常您会使用uuid。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句