2016-10-16 11 views
0

私はスポーツデータベースを構築しようとしています。ここでは、ユーザーがリストから15カ国の国を選択し、その国に異なる部門を提示します。ユーザは、部門を選択し、その部門内のチームのリストを選択して提示される。これは、国や部門を含むスポーツチームベースのデータベースの正しいデータベース構造ですか?

私が取ることを勧められたアプローチの1つは、国とチームのテーブルを別々にすることです。

表 - 国

国|チーム(int配列)

表 - チーム

ID(int型)|チーム名| Division

チーム(int配列)はチームテーブルのチーム名のIDと一致します。

これは正しいアプローチであると100%確信していません。

その他の解決策はありますか?

+0

1つの列に配列を格納することは悪いアドバイスです。 –

答えて

2

テーブルを3つ作成する必要があります。

あなたのクエリは次のようになり
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を取得します。 nそのチームのすべてのチームを表示します。

select id, name from teams where division_id = ?; 
+0

FKの(?)ポイントは待機しています:p – Drew

+0

@Drew擬似コードを意図していました。しかし、それは間違いなく有効なSQLコードになりました;-)。最初は、データ型を定義したくなかったので、すべての列は自明です。私は 'county_id'が'国家 'へのFKであることは明らかです - そうではありませんか?今すぐすべての詳細と、答えは複雑に見えます。 –

+0

ええ、私は知っている。しかし、フォロワーのために数十億時間のデバッグ(たぶん)を節約しました。大丈夫、しかし、多分。 – Drew

1

チームを国別テーブルに保存する必要はありません。国の名前の国のテーブルを持っているだけです。チームテーブルには、カントリーテーブルのインデックスを使用する国の列があります。特定の国のすべてのチームを検索できます。例えば;

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

また、おそらくcountryIndexも持つディビジョンテーブルが必要です。次に、どの国にも固有の部門のリストを提示します。

関連する問題