首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何制作只能支付特定朋友/人费用的社交媒体相册关系数据库?

如何制作只能支付特定朋友/人费用的社交媒体相册关系数据库?
EN

Stack Overflow用户
提问于 2016-10-06 10:41:34
回答 2查看 43关注 0票数 0

有人能帮我吗:如何在社交媒体中制作具有可见选项的相册表--公共的、私有的和特定的朋友/People?如何制作相册中的关系表和可以在相册中看到的特定朋友的列表?

谢谢你

EN

回答 2

Stack Overflow用户

发布于 2016-10-06 15:45:29

您需要一个表来解决许多人与相册之间的关系。这个表将有一个对PersonID和AlbumID的外键引用,可能还有一个布尔值“IsVisible”。

票数 0
EN

Stack Overflow用户

发布于 2016-10-07 00:28:56

首先,您需要以一种很容易(或尽可能容易)转换为模式的方式编写规范。例如:

“此系统由用户和相册组成。相册由一个用户创建并拥有。拥有相册的用户可以完全访问该相册,但所有其他用户要么被拒绝对相册的所有访问(默认值),要么在拥有用户的许可下被允许对相册进行读取访问。”

规范中有两个名词(用户,相册),因此有两个实体:用户和专辑。

代码语言:javascript
复制
create table Users(
  ID    int auto_generating primary key,
  ...   ... -- other user data
);

create table Albums(
  ID    int auto_generating primary key,
  ...   ... -- other album data
);

有两个重要的动词(拥有,访问)。这些描述了实体之间的关系。由于只有一个所有者,所以最简单的方法是从相册创建一个外键给拥有的用户。

代码语言:javascript
复制
create table Albums(
  ID      int auto_generating primary key,
  OwnerID int not null references Users( ID ),
  ...     ... -- other album data
);

使用相交表允许访问相册非常简单。

代码语言:javascript
复制
create table AlbumAccess(
    AlbumID  int not null references Albums( ID ),
    UserID   int not null references Users( ID )
);

此表可以有其他属性来描述这种关系,例如授予访问的日期,或者,如果您希望允许临时访问,则使用"GoodUntil“日期。如果你需要的话,你可以变得很有创造力。

立即想到的一个改进是,如果用户有一长串他们想要授予访问权限的其他用户,或者几个这样的列表。每次这些用户创建新专辑时,通过并授予他们访问权限会很快变得单调乏味。所以您可以创建包含用户列表的用户列表。然后,可以将访问权限授予列表中的每个用户。

每个用户都可以创建他们自己的列表,并给他们命名任何他们想要的:“家庭”,"Fall2017EnglishClass",“付费订阅者”等等。

这给我们提供了系统中的另一个实体,从而给出了另一个表:

代码语言:javascript
复制
create table Lists(
  ID      int    auto_generating primary key,
  Name    varchar( 32 ) not null,
  OwnerID int not null references Users
);

好吧,但现在我们又制造了另一个问题?(不!这从来没有发生过!)交集表包含给用户的FK,而不是列表。我们可以创建另一个相交表,将相册和列表绑定在一起,但这里有另一个可能的解决方案。

假设当我们创建一个新用户时,我们还在幕后创建了一个仅由该用户组成的列表。当用户被授予对相册的访问权限时,它实际上被赋予了这个列表别名。那么所有的访问都将通过列表。

因此,我们需要维护每个列表中的用户。

代码语言:javascript
复制
create table ListMembers(
  ListID    int  not null references Lists( ID ),
  MemberID  int  not null references Users( ID ),
  constraint PK_ListMembers primary key( ListID, MemberID )
);

因此,UserID表的AlbumAccess字段将更改为ListID,并将引用List表。

这都是裤子的设计,我还没画出来呢。所以我很可能错过了一些重要的事情。但它应该足够近,你可以处理任何松散的末端。如果没有,那就问吧。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39893859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档