如何实现每个用户的数据库视图?

时间:2017-04-17 19:12:11

标签: sql postgresql database-design

我有一个包含小部件及其各种属性的postgresql表。每个窗口小部件属于一组用户,但该组中的每个用户可能希望从其视图中存档/隐藏任何给定的窗口小部件。可能有数百个这样的小部件,有些用户只关心它们的某些子集,但这会成为每个用户的偏好。

我对如何有效地实现这一点感到茫然。我可以包括一个"不活动"窗口小部件表上的列,其中包含隐藏每一行的用户列表,但这看起来非常低效。翻转它,所以我将隐藏的项目存储在用户配置文件中并不会好得多,因为该列表随着时间的推移会变得任意大。对于这类问题,有没有最佳做法?

1 个答案:

答案 0 :(得分:0)

您正在寻找联结表。这是一个大纲:

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
);