2012-08-12 98 views
0

我需要帮助如何在我的mysql数据库中设置我的表。mysql数据库结构和关系

我有一个用户。用户可以根据需要获得10个令牌。令牌只能用于一件事。他们可以使用它创建一个卡通页面,游戏页面,生物页面,问题页面等。该标记也可以重新分配到另一个页面。

我想看看构建我的数据库的最佳方式是什么和关系。

我在想有一个用户表,令牌表,卡通表,游戏桌,生物表和问题表。但我如何与他们联系。

+0

这可以很容易地通过[关系数据库管理系统](http://en.wikipedia.org/wiki/Relational_database_management_system) – 2012-08-12 13:50:45

+0

以非常有效的方式完成当你说与所有人有关......什么样的相关你在找什么? – Deepak 2012-08-12 14:02:59

回答

0

关系数据库表设计不是一门硬科学。这是一个非常灵活的范例,可以根据应用程序的性质而改变。这就是说,你应该遵守某些设计原则。见例如http://en.wikipedia.org/wiki/Database_design

这就是说,我会采取一个似乎高度动态的方法,因为我不确定应用程序细节。首先,你肯定会需要一个users表可能看起来像:

用户:

  • FIRST_NAME
  • 姓氏
  • USER_ID
  • n_tokens
    • 我的情况下,把这个在这里用户的令牌数量是动态的

现在,您可以选择指定的用户的方式,你会希望看到如何用户都在使用他/她的令牌:

令牌:

  • token_id
    • 这用于指定这个(或这些)标记用于什么。
  • USER_ID
    • 这应该会对users.user_id重复的外键约束。
  • n_tokens
    • 这是从users.n_tokens不同。从您的问题 不清楚您是否总是每个功能都有1个令牌。这个值是未来可能增强的前瞻性方法 。
  • pagetype_id
    • 这是指定的令牌使用哪种类型的页面类型为。它将在pagetypes.pagetype_id上​​有 外键约束(请参见下文)。

如上所述,你希望人们在特定的页面类型使用令牌,就像卡通页面,生物页面等此表定义:

pagetypes:

  • pagetype_id
    • 用于定义此类页面的唯一标识符
  • pagetype_name
    • 用于标记页面类型的字段,例如, “卡通”,“生物”等

现在,你可能有几个表定义类型的页面,所以我会指定只有一个布局:

bio_pages:

  • pagetype_id
    • 这个id对pagetypes.pagetype_id重复的外键约束。 该表的值始终保持不变。这不是最常规的设计,因为你可能想要一个更通用的'网页'表, ,但几个复杂的连接可能会让一些开发人员感到困惑,甚至更糟糕,查询变慢。在tokens.token_id
  • token_id
    • 外键约束。
  • 其他
    • 领域的其余部分是用户定义的,如你所愿指定哪些 属于生物页面上。

摘要

综上所述表格布局,你要设计的数据库,以便自包含的实体不跨越多个表和多个实体不合并成一个表。这就是说,我从表中分离出tokens表中不同的<pagetype>_pages表。为了让设计更直观,我会做一些示例查询,以帮助您理解布局。

  1. 要获得用户已创建的所有生物的网页:

    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' 
    
  2. 要获取硬币的总数,用户使用了,并且还他们可以使用硬币的最大数量:

    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 
    

希望这一切有意义,非常直观。请让我知道,如果有什么不清楚。

+0

非常感谢你......我会试着实现这个结构......并让你知道它是如何发展的。 – 2012-08-12 18:39:17