4
  1. 我有一张供用户使用的桌子。每个用户都有他们教授的某些技能。例如:

    • 鲍勃可以教空手道
    • 路易丝可以教钢琴和编织
    • 罗杰可以教柔道、帆船和击剑

这就是我在数据库中完成的方式:

Table users
pk: uid, name

1 Bob, 
2 Louise, 
3 Roger

Table skills
pk: sk_id, skill

1 karate,
2 piano,
3 knitting,
4 judo,
5 sailing,
6 fencing

Table user_skill (relationship between user and skills)
pk:usk_id, fk:uid, sk_id

1 1 1,
2 2 2,
3 2 3,
4 3 4,
5 3 5,
6 3 6,

我想然后显示“罗杰有这些技能:柔道,编织篮子”

select name, skill 
from users, skills, user_skill
where users.uid = user_skill.uid
and users.uid = 3

这是正确的方法吗 - 无论是在设计表和查询(mysql)方面吗?

  1. 然后说我想用他们教的领域更新他们的个人资料:

    • 鲍勃可以在伦敦教空手道
    • 路易丝可以在博尔顿教钢琴,在曼彻斯特教针织
    • 罗杰可以在伦敦和曼彻斯特教柔道,在利物浦教帆船,在布拉德福德教击剑

所以我添加了以下表格:

Table cities
pk: city_id, city

1 London,
2 Manchester,
3 Liverpool,
4 Bolton,
5 Bradford,

但我对如何处理关系感到困惑。我一直在写它并意识到它不起作用并重新开始,所以我显然在某个地方出错了。

4

4 回答 4

2

我想说就关系而言,您的一般数据库结构很好。要合并城市方面,您可以使用建议的城市表,但也可以在 user_skill 表中添加一列以包含对城市表的引用。

还要确保在选择查询中使用正确的连接语句,因为这是最佳实践,可以帮助查询尽可能高效地运行。

于 2012-08-01T17:16:47.267 回答
1

用户能否在多个地点教授技能,例如“鲍勃在伦敦和博尔顿教授柔道”?还是严格意义上的一技一城?

根据您想要表格的方式,您只需将“城市”字段添加到 user_skills 表格,并拥有多个“bob/judo/cityX”“bob/judo/cityY”类型的记录。或者,您将添加另一个表“user_city_skills”,它将是“user_skill_ID,cityID”。

于 2012-08-01T17:17:36.687 回答
0

除了您的 usr_skill 表之外,您的结构看起来不错。要合并最后一部分,请在 user_skill 表中添加一个 fk city_id。如果玩家可以在多个城市教授相同的技能,您将需要一个额外的表格来避免多值列。

于 2012-08-01T17:20:55.313 回答
0

是的,继续。您还应该在表格中添加一列,user_skill该列将包含city_id.

于 2012-08-01T17:22:04.110 回答