Database design 有关权限/可见性的库数据库设计问题

Database design 有关权限/可见性的库数据库设计问题,database-design,Database Design,我正在创建一个画廊。我希望用户能够选择谁可以按组或个人查看他们的照片。我想我应该有一个表can\u see,有两列(用户id,照片id)。这应该适用于个人,但如果我把group\u ids也扔进去,它就不起作用了。我认为最好的方法可能是在选择组时将所选组中的每个人添加到该表中,而不是将其group\u id。但是,这会在表中创建更多的条目,以便以后进行筛选。这仍然是最好的方法吗 以下是我的想法: users: id, username, ... photos: id, album_id, ..

我正在创建一个画廊。我希望用户能够选择谁可以按组或个人查看他们的照片。我想我应该有一个表
can\u see
,有两列
(用户id,照片id)
。这应该适用于个人,但如果我把
group\u id
s也扔进去,它就不起作用了。我认为最好的方法可能是在选择组时将所选组中的每个人添加到该表中,而不是将其
group\u 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

如果您想减少要搜索的条目数量,我将采用以下方法

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.照片所有者可以向一组用户授予查看权限。 此操作将在中创建新记录 新组和的组表 现有的组不会。有新用户吗 在小组中,将需要新的记录 添加到用户表中。 最终,照片桌将被打开 更新了尽可能多的记录 是组中的用户

现在要访问这些照片…有 多个案例

  • 不属于任何组的单个用户可以请求访问 照片
  • 属于某个组的单个用户可以请求访问照片
  • 在这些情况下,我假设 来自应用程序的输入将 只需用户名和照片即可 访问权限(这实际上应该是 相册。自从你修改了你的问题 我不确定这是否仍然是唯一的选择 案例)。在这种情况下,您将执行以下操作: 在用户表中查找以获取 用户名的用户ID,将执行以下操作 照片表中的另一个查找 查看是否授予此用户ID访问权限 是否为所需照片(通过 检查记录是否存在)

    所以下一个问题是…我们为什么 需要组和用户组表吗?这 照片所有者需要 轻松授予和撤销访问权限 用户界面的特权。用这些 表:构建一个用户界面很容易 向照片所有者展示哪些组是 已创建和每个组的成员

    文件中缺少某些项目 问题是……比如,你是如何做到的 一个查看访问的请求?什么 信息将作为输入提供给 申请表?所有评论和建议 我提供的答案更新基于批次 一系列假设。现在我们知道为什么了 要求应该清楚地拼写 出去;-)


    我想到的另一个解决方案是,我们可以将
    can\u-see
    表扩展为包含
    group\u-id
    列,然后检查用户是否可以看到照片:

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


    这是一个额外的列,通常可能是
    null
    ,这意味着我们必须进行2次查询,而不是1次查询来检查权限,但它使
    可以看到的
    表稍微小一些,这意味着您可以在设置权限后修改组。

    我认为您或我有误解。我们没有搜索照片,我们正在尝试确定谁有权查看照片。使用此设置,您将如何执行此操作?我甚至不知道“用户组表”是如何工作的。如果我有5个用户都属于同一组,会发生什么?组名重复了5次?那只是个糟糕的设计。我会用我的设置来回答我的问题…同意。正如您正确指出的那样,我以前设计的重复组名的用户组表不是一个好的设计。我对设计做了一些修改,以反映我的实际想法。我所说的搜索实际上是指访问。我还是不明白。你让它听起来像是个人用户拥有照片,或者是整个用户拥有照片。如果用户A上传了照片B,然后出现了想要查看照片B的用户C。我们如何检查他是否有权限这样做?根据你的说法,我们从用户表中调出他的用户ID,然后检查照片表。。。但是照片表只是描述了谁拥有它。您仍然缺少可见性表。根据我的设计,照片所有者将为其他用户或组提供查看照片的访问权限。在您的示例中,这将是用户A向用户C授予查看其照片B的权限。这将反过来在用户表和照片表中创建一个条目。有了这个用户B应该能够查看用户A的照片B哦。。。你的照相桌是我的,你能看见吗?我以为它也在储存照片信息。为什么它同时在用户表和照片表中创建一个条目?团体的事情仍然没有任何意义。“访问群组照片”是不对的。这是“如果一个团体的成员要求看一张照片”。。。为什么我们要对照照片表检查多个用户ID?我们只想检查一个特定的用户是否可以看到它?你不必费心回答这个问题,我们只是看起来意见不一致。
    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