2011-01-22 78 views
0

我有一個表稱爲隊(ID,名稱,...)我有一個表稱爲分區(ID,名稱,......)我想diviosn持有teams.id對於一個分區中的每個球隊而言,球隊可以有多於一個分區。我如何設置?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我只有兩個字段都是主鍵?還是我需要一個自動遞增的附加密鑰? – Rich 2011-01-22 21:30:42

0

您可以創建所謂的關係表。這是團隊表格和Divisions表格之間的中間表格。然後我們說球隊表(tbl_teams)和分區表(tbl_divisions)之間存在多對多的關係。你可以在一個部門擁有很多團隊,在許多部門擁有一個團隊,或者在許多部門擁有許多團隊。

tbl_teams_divisions_rel

  • ID INT PRIMARY KEY NOT NULL AUTO_INCREMENT

  • TEAM_ID INT NOT NULL

  • Division_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 2011-01-22 21:38:36

1

這是多對多關係的標準方法:製作包含兩列team_id和division_id的單獨表格teams_divisons(或divisions_teams)。

0

您可以將兩列 - division_names添加到將包含每個部門中團隊名稱的團隊,並將team_names添加到包含團隊所屬部門名稱的部門。

當您添加團隊或部門,按照它由;,那麼你可以通過使用$field = explode(";", $field);創建基於該領域的團隊或部門的數組,然後使用foreach()列表中的組或部門。

這是假設你正在使用PHP。如果我誤解了你,請告訴我。

+0

這就是我原來的樣子,看起來有點麻煩。是的,我正在使用PHP MYSQL和Joomla。 – Rich 2011-01-22 21:35:39

+0

是的,我沒有想到添加關係表。有關詳細信息,請參閱...任何其他答案。 :p – Andrew 2011-01-22 21:38:59

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), 
);