【问题标题】:Database design: User with access to specific pages数据库设计:有权访问特定页面的用户
【发布时间】:2011-06-09 18:03:44
【问题描述】:

我正在开发一个允许用户管理其主机帐户的应用程序。目前,数据库只是一个 users 表和一个 hostingaccounts 表。但是,我不知道将这些链接到表的最佳方法是什么。

users 表是否应该有一个名为“owned_accounts”的列,其中插入的数据如“5,18,28”,然后在应用程序中拆分?你有什么建议?

【问题讨论】:

    标签: php mysql database database-design web-applications


    【解决方案1】:

    使用您的描述,我看到以下实体和关系:

    users(
       user_id (PK)
    )
    
    accounts(
       account_id (PK)
    )
    
    user_accounts(
       user_id    references users(user_id)
      ,account_id references accounts(account_id)
    )
    

    根据您的要求,您可以通过不同的方式在 user_accounts 上定义键以强制执行约束:

    1. primary key(user_id)
    

    一个用户只能拥有一个帐户。一个帐户可能由多个用户拥有。

    2. primary key(account_id)
    

    一个用户可能拥有多个帐户。一个帐户只能由一个用户拥有。

    3. primary key(user_id, account_id)
    

    一个用户可以拥有多个账户,一个账户可以被多个用户拥有。

    如果以上都不符合您的要求,您必须提供更多信息。

    【讨论】:

      【解决方案2】:

      如果用户与 hostingaccounts 记录是一对一的关系,您的解决方案可以正常工作,但如果用户有可能拥有超过 1 个托管帐户,则“user_id”列应位于托管帐户表中。

      如果您认为需要多对多关系,则可以创建第三个表来保存 user_id 和 hosting_account_id。

      最佳答案实际上取决于系统的目标和限制。

      【讨论】:

        【解决方案3】:

        如果一个用户可以拥有多个托管帐户,您需要一个链接表 UserId+HostingAccountID 作为键。

        【讨论】:

          【解决方案4】:

          如果只有一个用户可以成为主机帐户的所有者,请在 hostingaccounts 上使用外键,例如 ownerid

          如果您的主机帐户可以由多个用户拥有,请添加一个额外的表,例如 hostingaccountsownerships,其中包含 ownershipiduseridhostingaccountid 并从那里获取。

          【讨论】:

          • 您的答案和@pablichan 的非常相似。为什么您建议创建一个 ownershipid 列?怎么会有用?
          • 如果您想添加一些额外的信息以使表格独立使用,例如用户对主机帐户拥有多少权限,ownershipid 列就会派上用场。你的桌子没有必要工作。答案是相似的,因为这是在 sql 中使用 n:m 关系的已知且唯一的方法,如果您需要 1:n 关系,我的答案中不包含在@pablochan 中的部分是正确的方法.
          • 澄清一下:1:n 表示 1 个用户可以拥有一些托管帐户,n:m 表示一些用户共享一个帐户,每个帐户有多个所有者。
          • 将此标记为已接受,因为它对我来说是最容易理解的。谢谢!
          【解决方案5】:

          创建具有 2 列的第三个表:user_id、account_id。这样一个用户可以连接到多个帐户,反之亦然。这样您就可以轻松地加入这三个表,以找出用户可以使用哪些帐户等。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-01-26
            • 1970-01-01
            • 2010-11-01
            • 2017-02-24
            • 1970-01-01
            • 2023-03-20
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多