我希望建立一个体育数据库,用户从15个不同国家/地区的列表中选择一个国家/地区,然后在该国家/地区内展示不同的部门。然后,用户选择一个部门,并在该部门中显示要选择的团队列表。
我建议采取的一种方法是为国家和小组提供单独的表格。
表 - 国家/地区
国家|团队(int数组)
表 - 团队
ID(int)|球队名称|司
'团队(int数组)将与团队表中团队名称的ID匹配。
我并非100%确定这是正确的做法。
哪些其他解决方案是可取的?
答案 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的分区表。然后,您将显示特定于任何国家/地区的分部列表。