2011-01-22 9 views
0

私はチームと呼ばれるテーブルを持っています(id、name、...)私はdivisions(id、name、......)というテーブルを持っています。部門内の各チームごとに、チームは複数の部門に分かれています。これをどのように設定するのですか?MYSQLテーブルデザインのヘルプ

答えて

2

この

teams 
-teamId 
-teamName 

divisions 
-divisionId 
-divisionName 

のように見えた私は、あなたが探しているものだと思い、多対多のリンクテーブルである

membership 
-divisionId 
-teamId 

これは、あなたがすべてのチームを見つけることができるようになります

select teamId 
from team t 
join membership m 
    on m.teamId = t.teamId 
where m.divisionId = 'theIdYouWant' 

また、部門に所属したいチーム数を増やすことができますあなたが同じチームを含むことを望むように、多くの部門に分かれています。それは多対多関係テーブルです。

+0

メンバーシップ-divisionId -teamId私は2つのフィールドの両方がプライマリキーであるだけでしょうか?または、自動増分される追加のキーが必要ですか? – Rich

+0

リンクテーブルにプライマリキーが必要ありません。 – cag

0

リレーションシップテーブルと呼ばれるものを作成します。これはチームテーブルと部門テーブルの間の中間テーブルです。次に、チームテーブル(tbl_teams)と部門テーブル(tbl_divisions)の間に多対多の関係があるとします。 1つの部門に多くのチームを、多くの部門に1つのチームを、または複数の部門に多くのチームを持つことができます。

tbl_teams_divisions_rel

  • ID INT PRIMARY KEY NOT NULL AUTO_INCREMENT

  • Division_ID INT

  • 、NOT NULL

TEAM_ID INT NOT NULLを次に、あなたとの関係を確立しますtbl_teams_divisions_

:あなたが質問をする場合はrel.Team_IDとtbl_team.ID、その後、tbl_teams_divisions_rel.Division_IDとtbl_divisions.ID

、ID 13と特定の部門のすべてのチームを一覧表示する方法は、次の操作を行います

SELECT tbl_teams.* 
FROM 
    tbl_teams 
    INNER JOIN tbl_teams_divisions_rel ON tbl_teams_divisions_rel.Team_ID = tbl_teams.ID 
WHERE tbl_teams_divisions_rel.Division_ID = 13 

希望すると助かります!

+0

ありがとう、私はそれを試してみます。 IDフィールドは必須フィールドですか? – Rich

1

多対多リレーションシップの標準的なアプローチです。team_idとdivision_idの2つの列を含む別々のテーブルteams_divisons(またはdivisions_teams)を作成します。

0

division_namesを各部門に属するチームの名前を含むチームに追加し、team_namesチームに属する部門の名前を含む部門に追加することができます。あなたは、チームや部門を追加;ことにより、それに従うとき

することは、あなたは$field = explode(";", $field);を使用して、そのフィールドに基づいて、チームや部門の配列を作成し、foreach()を使用してチームや部署を一覧表示することができます。

これはあなたがPHPを使用していると仮定しています。私があなたに誤解しているかどうか教えてください。あなたのテーブルを想定し

+0

それは私がもともとそれをした方法はちょっと面倒です。はい、私はPHP MYSQLとJoomlaを使用しています。 – Rich

+0

ええ、私は関係テーブルを追加することを考えていませんでした。参照してください...詳細については、他の回答のいずれか。 :p – Andrew

0

分割テーブルとチームテーブルを結合する多対多ジャンクションテーブルを作成する必要があります。

CREATE TABLE division (division_id INT NOT NULL, 
        PRIMARY KEY (division_id) 
); 

CREATE TABLE team (team_id INT NOT NULL, 
        PRIMARY KEY (team_id) 
); 

CREATE TABLE division_team (division_team_id INT, 
        PRIMARY KEY (division_team_id) 
        division_id INT, 
        team_id INT, 
        FOREIGN KEY (division_id) REFERENCES division(division_id), 
        FOREIGN KEY (team_id) REFERENCES team(team_id), 
); 
+0

は本当に必要なdivision_team_idですか? div_idとteam_idの両方を主キーにすることはできますか? – Rich

+0

それは依存しています...必要ならば、あなたは複合主キーをdivision_idとteam_idを使って作ることができます。しかし、division_teamテーブルが他のテーブルの親になる場合は、子テーブルがコンポジットIDを外部キーとして継承する必要がないように、division_team_id主キーを持つ方が良いでしょう。 – limc