【问题标题】:How to implement per-user views of database?如何实现数据库的每个用户视图?
【发布时间】:2017-04-18 03:15:53
【问题描述】:
我有一个包含小部件及其各种属性的 postgresql 表。每个小部件都属于一组用户,但组中的每个用户可能希望从他们的视图中存档/隐藏任何给定的小部件。可能有数百个这样的小部件,有些用户只关心其中的一部分,但这成为每个用户的偏好。
我不知道如何有效地实现这一点。我可以在小部件表中包含一个“非活动”列,其中包含一个隐藏每一行的用户列表,但这似乎非常低效。翻转它以便我将隐藏的项目存储在用户配置文件中似乎并没有好多少,因为随着时间的推移,该列表可能会变得任意大。这类问题有什么最佳实践吗?
【问题讨论】:
标签:
sql
postgresql
database-design
【解决方案1】:
您正在寻找连接表。这是一个大纲:
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
);