Mysql 如何设计这个数据库
我有一张供用户使用的桌子。每个用户都有他们教授的特定技能。例如:Mysql 如何设计这个数据库,mysql,database,Mysql,Database,我有一张供用户使用的桌子。每个用户都有他们教授的特定技能。例如: 鲍勃会教空手道 路易丝会教钢琴和编织 罗杰可以教柔道、帆船和击剑 我在数据库中就是这样做的: 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 (rel
- 鲍勃会教空手道
- 路易丝会教钢琴和编织
- 罗杰可以教柔道、帆船和击剑
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,
然后我想展示“罗杰有这些技能:柔道、编织篮球”
在设计表和查询(mysql)方面,这是正确的方法吗
- 鲍勃可以在伦敦教空手道
- 路易斯可以在博尔顿教钢琴,在曼彻斯特教编织
- 罗杰可以在伦敦和曼彻斯特教柔道,在利物浦教帆船,在布拉德福德教击剑
Table cities
pk: city_id, city
1 London,
2 Manchester,
3 Liverpool,
4 Bolton,
5 Bradford,
但我对如何处理这些关系感到困惑。我不断地写出来,意识到它不起作用,然后又重新开始,所以我显然在某个地方出了问题。我想说,就关系而言,您的一般数据库结构很好。要合并城市方面,您可以使用建议的城市表,但也可以在用户技能表中添加一列,以包括对城市表的引用
还要确保在选择查询中使用正确的join语句,因为这是最佳做法,有助于查询尽可能高效地运行。用户可以在多个地点教授技能,例如“bob在伦敦和博尔顿教授柔道”?还是严格地说是一个城市的一项技能
根据您希望表格的方式,您可以在user_skills表格中添加一个“city”字段,并拥有多个“bob/judo/cityX”“bob/judo/cityY”类型的记录。或者您将添加另一个表“user\u city\u skills”,其中是“user\u skill\u ID,cityID”。除了usr\u skill表之外,您的结构看起来很好。要合并最后一部分,请在用户技能表中添加fk city_id。如果玩家可以在多个城市教授相同的技能,您将需要一个额外的表来避免多值列。是的,继续。您还应该在表
user\u skill
中再添加一列,该列将保存city\u id
您应该停止使用隐式语法。这是一种SQL反atten和非常糟糕的编码技术。您的意思是在查询中添加表名吗?还是还有别的?嗨!谢谢你的回复。如果我有多个bob/柔道/城市行,这不会违反1NF,因为我重复了多组信息-我已经阅读了关于1NF的不同定义,因此不确定。
Table cities
pk: city_id, city
1 London,
2 Manchester,
3 Liverpool,
4 Bolton,
5 Bradford,