2011-01-22 102 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), 
);