对于以国家和部门为特色的基于运动团队的数据库,这是否是正确的数据库结构?

时间:2016-10-16 17:42:53

标签: mysql database

我希望建立一个体育数据库,用户从15个不同国家/地区的列表中选择一个国家/地区,然后在该国家/地区内展示不同的部门。然后,用户选择一个部门,并在该部门中显示要选择的团队列表。

我建议采取的一种方法是为国家和小组提供单独的表格。

表 - 国家/地区

国家|团队(int数组)

表 - 团队

ID(int)|球队名称|司

'团队(int数组)将与团队表中团队名称的ID匹配。

我并非100%确定这是正确的做法。

哪些其他解决方案是可取的?

2 个答案:

答案 0 :(得分:2)

您应该创建三个表。像

这样的东西
create table countries(
    id int unsigned auto_increment primary key,
    name varachar(100) not null,
    unique key (name)
);

create table divisions(
    id int unsigned auto_increment primary key,
    country_id int unsigned not null,
    name varchar(100) not null,
    unique key uk_name (name),
    foreign key fk_countries (country_id)
        references countries(id)
        on update restrict
        on delete cascade
);

create table teams(
    id int unsigned auto_increment primary key,
    division_id int unsigned not null,
    name varchar(100) not null,
    unique key uk_name (name),
    foreign key fk_divisions (division_id)
        references divisions(id)
        on update restrict
        on delete cascade
);

您的疑问将是......

显示所有国家/地区:

select id, name from countries;

用户选择一个国家/地区后,您就知道该国家/地区的ID,并且可以显示该国家/地区的所有部门:

select id, name from divisions where county_id = ?;

现在,用户选择一个部门并获得其ID - 因此您可以显示该部门的所有团队:

select id, name from teams where division_id = ?;

答案 1 :(得分:1)

您无需将团队存储在国家/地区表中。只需要一个包含国家名称的国家/地区表。在teams表中,有一个国家/地区列,该列使用国家/地区表的索引。现在,您可以搜索特定国家/地区的所有团队。例如;

  select teamName, otherTeamData from teamTable where countryIndex = selectedCountryIndex and divisionIndex = selectedDivisionIndex;

您还需要一个可能具有countryIndex的分区表。然后,您将显示特定于任何国家/地区的分部列表。