Tengo una tabla postgresql que contiene widgets y sus diversos atributos. Cada widget pertenece a un grupo de usuarios, pero cada usuario del grupo puede querer archivar/ocultar cualquier widget dado de su vista. Puede haber cientos de estos widgets y algunos usuarios solo se preocupan por un subconjunto de ellos, pero eso se convierte en una preferencia de cada usuario.
No sé cómo implementar esto de manera eficiente. Podría incluir una columna "inactiva" en la tabla de widgets con una lista de usuarios que han ocultado cada fila, pero eso parece terriblemente ineficiente. Darle la vuelta para almacenar elementos ocultos en un perfil de usuario no parece mucho mejor, ya que esa lista podría volverse arbitrariamente grande con el tiempo. ¿Hay mejores prácticas para este tipo de problema?
Estás buscando una mesa de unión. Aquí hay un esquema:
create table widgets ( widgetId serial primary key, . . . ); create table users ( userId serial primary key, . . . ); create table userWidgets ( userWidgetId serial primary key, userId int not null references users(userId), widgetId int not null references widgets(widgetId), isVisible boolean );