Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.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
Mysql 如何设计这个数据库_Mysql_Database - Fatal编程技术网

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,