繁体   English   中英

MYSQL表设计帮助

[英]MYSQL Table design help

我有一个表格,称为teams(id,name,...)。我有一个表格,称为divisions(id,name,......)。我希望diviosn将每个团队中的teams.id保持为div。团队可以分成多个区域。 我该如何设置?

假设你的桌子看起来像这样

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'

它还将允许您要属于一个部门的团队数量尽可能多,而要包含相同团队的团队数量则要尽可能多。 这是一个多对多关系表。

这是用于多对多关系的标准方法:制作一个单独的表teams_divisons(或divisions_teams)表,其中包含两列team_id和division_id。

您创建所谓的关系表。 这是Teams表和Divisions表之间的中间表。 然后我们说在Teams表(tbl_teams)和Divisions表(tbl_divisions)之间存在多对多关系。 您可以在一个部门中拥有多个团队,在多个部门中具有一个团队,也可以在多个部门中具有多个团队。

tbl_teams_divisions_rel

  • ID INT主键不能为空AUTO_INCREMENT

  • Team_ID INT非空

  • Division_ID INT非空

然后,您在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

希望能帮助到你!

-你可以添加两列division_names到团队将包含团队,在各部门的名称,并team_names到将包含团队的一部分区划名称部门。

当您添加团队或部门时,请紧跟一个; ,那么您可以使用$field = explode(";", $field);基于该字段创建一组团队或部门$field = explode(";", $field); ,然后使用foreach()列出团队或部门。

假设您正在使用PHP。 让我知道我是否误解了你。

您需要创建一个多对多联结表才能联接部门和团队表。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM