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

関係が続く限り、一般的なDB構造は問題ないと思います。都市の側面を組み込むには、提案された都市テーブルを使用できますが、user_skillテーブルに列を追加して、都市テーブルへの参照を含めることもできます。

また、selectクエリで適切な結合ステートメントを使用するようにしてください。これはベストプラクティスであり、クエリを可能な限り効率的に実行するのに役立ちます。

于 2012-08-01T17:16:47.267 に答える
1

ユーザーは複数の場所でスキルを教えることができますか?たとえば、「ボブはロンドンとボルトンで柔道を教えます」?それとも、厳密に1つのスキル-1つの都市ですか?

テーブルの方法に応じて、user_skillsテーブルに「city」フィールドを追加し、複数の「bob / judo / cityX」、「bob / judo/cityY」タイプのレコードを作成します。または、「user_skill_ID、cityID」となる別のテーブル「user_city_skills」を追加します。

于 2012-08-01T17:17:36.687 に答える
0

はい、続けてください。user_skillまた、を保持する列をテーブルにもう1つ追加する必要がありますcity_id

于 2012-08-01T17:22:04.110 に答える
0

構造は、usr_skillテーブルを除いて正常に見えます。最後の部分を組み込むには、user_skillテーブルにfkcity_idを追加します。プレイヤーが複数の都市で同じスキルを教えることができる場合は、複数値の列を避けるために追加のテーブルが必要になります。

于 2012-08-01T17:20:55.313 に答える