关于权限/可见性的Gallery数据库设计问题

时间:2009-06-10 02:20:24

标签: database-design

我正在创建一个画廊。我希望用户能够选择谁可以按群组或个人查看他们的照片。我想我应该有一个表can_see,其中有两列(user_id, photo_id)。这应该适用于个人,但如果我在其中投掷group_id,它将无法工作。我认为最佳方法可能只是在选择组时将选定组中的每个人添加到该表,而不是group_id。但是,这会在表格中创建更多条目以便稍后筛选。这仍然是最好的方法吗?


以下是我的想法:

users: id, username, ...
photos: id, album_id, ...
albums: id, user_id (owns all photos in album), ....
can_see: user_id, photo_id
groups: id, user_id(owner), name
member_of: user_id, group_id

2 个答案:

答案 0 :(得分:2)

如果您想要消除要搜索的条目数量,我会采用以下方法。

User Table - UserID, UserName
Group Table - GroupID, GroupName
User Group Table - GroupID, UserID
Photo Table - PhotoID, UserID

如果您想要访问特定用户的照片,您将从用户表中获取用户ID,并在照片桌上按该ID进行查找。

如果您想要访问某个论坛的照片,您可以从“用户组”表中获取用户ID,并在照片桌上查找这些ID。

***详细评论

  

好吧,让我为你拼出来......那里   这里有几个动作   由照片所有者或至少执行   这是我的理解。   1.照片所有者可以授予对单个用户的viwership访问权限。   这将在用户表中创建一条新记录   对于新用户。对于现有用户而言   惯于。这也将创造一个新的   用照片记录在照片表中   现有的或新创建的用户ID。   2.照片所有者可以授予对一组用户的收视访问权限。   此操作将在中创建新记录   一个新组的组表和   现有的团体不会。任何新用户   在小组中将需要新的记录   添加到用户表。   最终,照片表将是   更新了与​​那里一样多的记录   是该组中的用户。

     

现在访问照片......有   多个案例

     
      
  1. 不属于任何群组的单个用户可以请求访问   照片。
  2.   
  3. 属于某个群组的单个用户可以请求访问该照片。
  4.         

    在这些案例中,我假设了   来自应用程序的输入   只有用户名和&照片到   访问(这实际上应该是   专辑。既然你修改了你的问题   我不确定这是否仍然存在   案件)。在这种情况下,你会做一个   在用户表中查找以获取   用户名的用户ID,将会这样做   另一个在照片表中查找   查看是否授予此用户标识访问权限   所要求的照片与否(通过   检查记录是否存在)。

         

    接下来的问题是......为什么我们这样做   需要小组和用户组表?这个   照片所有者需要   轻松授予和撤销访问权限   来自UI的权限。用这些   表格很容易构建一个UI   向照片所有者展示了哪些群组   创建和每个小组的成员。

         

    缺少某些物品   问题......例如,怎么做   一个查看访问请求?什么   信息将作为输入提供   应用程序?所有评论和   回答我的更新是基于很多   假设。所以现在我们知道为什么   要求应明确拼写   出; - )

答案 1 :(得分:0)

我想到的另一个解决方案是,我们可以修改can_see表格以包含group_id列,然后检查用户是否可以看到照片:

SELECT 1 FROM can_see WHERE user_id=USERID AND photo_id=PHOTOID

SELECT 1 FROM can_see JOIN member_of ON can_see.group_id = member_of.group_id WHERE member_of.user_id=USERID AND can_see.photo_id=PHOTOID

这是额外的列,通常可能是null,这意味着我们必须执行2次查询而不是1才能检查权限,但它会使can_see表稍微变小,这意味着你可以在设置权限后修改组。