すべての人のレコードが UUID によって識別され、すべてのグループが UUID によって識別されると仮定します。グループ内のすべてのユーザーのリストと、ユーザーが属するすべてのグループのリストに対して共通のクエリを実行する必要がある場合、どのデータ モデルを作成しますか。すなわち
create table membership (
person_uuid uuid,
group_uuid uuid,
joined bigint,
primary key (person_uuid, group_uuid));
上記は個人によるクエリを最適化し、以下はグループによるクエリを最適化します。
create table membership (
group_uuid uuid,
person_uuid uuid,
joined bigint,
primary key (group_uuid, person_uuid));
「フィルタリングを許可する」を使用person_uuid
しなくても、最適にクエリを実行できるようにするための適切な方法はありますか。つまり、次のようになります。group_uuid
select group_uuid from membership where person_uuid=?
select person_uuid from membership where group_uuid=? allow filtering
先に進んで、両方向のクエリ用にデータの 2 つのコピーを保存しますか?これには原子性の問題がありますが、そうですか?