PHP で作業している小さなプロジェクトのデータベースを設計しようとしています。私はデータベースを扱った経験があまりないので (すぐに気付くと思いますが)、今は少し深みにはまってしまいました。
PHP で作成している基本的な統計システムの基盤となるデータベースを開発しています。(少なくとも) 3 つのテーブルが必要であるという結論に達しました。
TOURNAMENT
- > 1 つのトーナメントで多くの試合が行われる
tournamentID SMALLINT UNSIGNED PRIMARY KEY,
MATCH
-> 1 つの試合に多数のプレイヤーが参加
tournamentID SMALLINT UNSIGNED,
matchID SMALLINT UNSIGNED,
PLAYER
-> 1 人のプレーヤーが多くの試合と多くのトーナメントを行う
tournamentID SMALLINT UNSIGNED,
matchID SMALLINT UNSIGNED,
playerID SMALLINT UNSIGNED,
このデータベースを作成しようとする私の試み:
<?php
//Connect
$link = mysql_connect("localhost", "root", "password") or die(mysql_error());
mysql_select_db("stats") or die(mysql_error());
//Drop old tables
mysql_query('DROP TABLE PLAYERS');
mysql_query('DROP TABLE MATCHES');
mysql_query('DROP TABLE TOURNAMENT');
echo('Old tables dropped<br \>');
//Create new tables
// TOURNAMENT
mysql_query('CREATE TABLE TOURNAMENT(
tournamentID SMALLINT UNSIGNED PRIMARY KEY,
)') or die(mysql_error());
echo('TOURNAMENT created...<br />');
// MATCHES
mysql_query('CREATE TABLE MATCHES(
tournamentID SMALLINT UNSIGNED,
matchID SMALLINT UNSIGNED,
PRIMARY KEY (tournamentID, matchID),
FOREIGN KEY (tournamentID) REFERENCES TOURNAMENT(tournamentID)
)') or die(mysql_error());
echo('MATCH created...<br />');
// PLAYERS
mysql_query('CREATE TABLE PLAYERS(
tournamentID SMALLINT UNSIGNED,
matchID SMALLINT UNSIGNED,
playerID SMALLINT UNSIGNED,
PRIMARY KEY (tournamentID, matchID),
FOREIGN KEY (tournamentID) REFERENCES TOURNAMENT(tournamentID),
FOREIGN KEY (matchID) REFERENCES MATCHES(matchID)
)') or die(mysql_error());
echo('PLAYERS created...<br />');
echo('Blank tables created');
mysql_close();
PHP スクリプトを実行すると、エラー 150 が表示されます。これは、PLAYERS テーブル内の主キー/外部キー参照と関係があると思われます。
Old tables dropped
TOURNAMENT created...
MATCH created...
Can't create table 'stats.players' (errno: 150)
私はいくつかの読書を行い、以前の質問をいくつか見ましたが、そもそも実際の問題 (エラーが発生している理由) を本当に理解していません。データベースの設計が間違っていることは明らかですが、データベースを改善および修正する方法がわかりません。
助けてください。