我需要有关如何在我的mysql数据库中设置表的帮助。
我有一个用户。用户可以根据需要获得10个令牌。令牌只能用于一件事。他们可以使用它来创建卡通页面,游戏页面,生物页面,问题页面等。令牌也可以重新分配到另一个页面。
我想知道构建数据库的最佳方式是什么以及关系。
我正在考虑使用用户表,令牌表,卡通表,游戏表,生物表和问题表。但是我如何与所有这些相关。
答案 0 :(得分:0)
关系数据库表设计不是一门硬科学。它是一种高度灵活的范例,可以并且将根据应用程序的性质而改变。话虽如此,您通常应遵循某些设计原则。参见例如http://en.wikipedia.org/wiki/Database_design
话虽这么说,我会从一个看似高度动态的方法中尝试一下,因为我不确定具体的应用程序。首先,您肯定需要一个users
表,看起来像:
用户:
现在您已经有了指定用户的方法,您将希望了解该用户如何使用他/她的令牌:
标记:
如上所述,您希望人们在特定页面类型上使用令牌,例如本表定义的卡通页面,生物页面等:
pagetypes:
现在,您可能有几个表定义页面类型,所以我只指定一个布局:
bio_pages:
概要
总结上面的表格布局,您需要设计数据库,以便自包含实体不跨越多个表,并且多个实体不会合并为一个表。话虽如此,我从users
表中分离出来自不同tokens
表的<pagetype>_pages
表。为了使设计更直观,我将做一些可能有助于您理解布局的示例查询。
获取用户创建的所有生物页面:
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
希望这一切都有意义且直观。如果有任何不清楚的地方,请告诉我。