Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mysql数据库结构与关系_Php_Mysql_Relationship - Fatal编程技术网

Php mysql数据库结构与关系

Php mysql数据库结构与关系,php,mysql,relationship,Php,Mysql,Relationship,我需要有关如何在mysql数据库中设置表的帮助 我有一个用户。一个用户可以获得10个令牌以供其使用。令牌只能用于一件事。他们可以使用它创建卡通页面、游戏页面、生物页面、问题页面等。令牌也可以重新分配到其他页面 我想看看构建数据库的最佳方式是什么,以及它们之间的关系 我想有一个用户表、令牌表、卡通表、游戏表、生物表和问题表。但是我如何与他们所有人联系呢 关系数据库表设计不是一门硬科学。它是一个高度灵活的范例,可以而且将根据应用程序的性质而改变。也就是说,有一些特定的设计原则,您通常应该遵守。见例

我需要有关如何在mysql数据库中设置表的帮助

我有一个用户。一个用户可以获得10个令牌以供其使用。令牌只能用于一件事。他们可以使用它创建卡通页面、游戏页面、生物页面、问题页面等。令牌也可以重新分配到其他页面

我想看看构建数据库的最佳方式是什么,以及它们之间的关系


我想有一个用户表、令牌表、卡通表、游戏表、生物表和问题表。但是我如何与他们所有人联系呢

关系数据库表设计不是一门硬科学。它是一个高度灵活的范例,可以而且将根据应用程序的性质而改变。也就是说,有一些特定的设计原则,您通常应该遵守。见例

话虽如此,我将从一种似乎高度动态的方法来尝试这一点,因为我不确定应用程序的细节。首先,您肯定需要一个
users
表,该表可能如下所示:

用户:

  • 名字
  • 用户id
  • n_代币
    • 我把它放在这里,以防用户的令牌数量是动态的
现在您有了一种指定用户的方法,您将希望了解该用户如何使用其令牌:

代币:

  • 令牌id
    • 这用于指定此(或这些)令牌的用途
  • 用户id
    • 这应该对users.user\u id具有重复的外键约束
  • n_代币
    • 这与users.n_令牌不同。你的问题并不清楚 是否每个功能始终有1个令牌。此值是一个 对未来可能的增强采用前瞻性方法
  • 页面类型\u id
    • 这是为了指定令牌用于的页面类型的类型。会有 pagetypes.pagetype_id上的外键约束(请参见下文)
如上所述,您希望人们在特定的页面类型上使用标记,如卡通页面、生物页面等。此表定义了:

页面类型:

  • 页面类型\u id
    • 用于定义此类型页面的唯一标识符
  • 页面类型名称
    • 用于标记页面类型的字符串字段,例如“卡通”、“生物”等
现在,您可能有多个表定义了页面类型,因此我将仅为一个表指定布局:

个人主页:

  • 页面类型\u id
    • 此id在pagetypes.pagetype\u id上具有重复的外键约束。 此表的值将始终保持不变。这不是最重要的 规范化设计,因为您可能希望有一个更通用的“页面”表, 但是,一些复杂的连接可能会让一些开发人员甚至其他人感到困惑 更糟糕的是,查询速度慢
  • 令牌id
    • 令牌上的外键约束。令牌\u id
  • 其他
    • 其余字段是用户定义的,如您希望指定的 属于个人主页
总结

要总结上述表布局,您需要设计数据库,使自包含的实体不会跨越多个表,并且多个实体不会合并到一个表中。说到这里,我将
用户
表与
令牌
表从不同的
页面
表中分离出来。为了使设计更直观,我将进行一些示例查询,这可能有助于您理解布局

  • 要获取用户创建的所有bio页面,请执行以下操作:

    SELECT    bio_pages.*
    FROM      bio_pages
    INNER
    JOIN      tokens
        ON    bio_pages.token_id=tokens.token_id
    INNER
    JOIN      users
        ON    tokens.user_id=users.user_id
    WHERE     users.first_name='john'
        AND   users.last_name='doe'
    
  • 要获取用户已使用的硬币总数以及可使用的最大硬币数,请执行以下操作:

    SELECT    SUM(tokens.n_tokens) AS used_tokens,
              users.n_tokens       AS max_tokens
    FROM      tokens
    INNER
    JOIN      users
        ON    tokens.user_id=users.user_id
    WHERE     users.first_name='john'
        AND   users.last_name='doe'
    GROUP BY  users.user_id
    

  • 希望这一切都是有道理的,而且是直观的。如果有什么不清楚的地方,请告诉我。

    当你说“与所有这些内容相关”时,这可以很容易地以非常有效的方式完成。。你在寻找什么样的关联?非常感谢…我将尝试实现这个结构…并让你知道它是如何进行的。