我正在尝试为我正在使用 PHP 进行的一个小项目设计一个数据库。我没有太多使用数据库的经验(你很快就会注意到),所以现在我已经把自己投入了一点点。
我正在开发一个数据库,它将成为我用 PHP 编写的基本统计系统的基础。我得出的结论是,我将需要(至少)3 张桌子。
TOURNAMENT
- >一场比赛有很多场比赛
tournamentID SMALLINT UNSIGNED PRIMARY KEY,
MATCH
->一场比赛有很多球员
tournamentID SMALLINT UNSIGNED,
matchID SMALLINT UNSIGNED,
PLAYER
->一名球员有许多比赛和许多锦标赛
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 脚本时,我收到 err 150,我认为这与我在 PLAYERS 表中的主键/外键引用有关:
Old tables dropped
TOURNAMENT created...
MATCH created...
Can't create table 'stats.players' (errno: 150)
我已经阅读并查看了之前的一些问题,但我并没有真正理解实际问题(发生错误的原因)。显然我的数据库设计不正确,但我不确定我应该如何改进和修复它。
请帮忙。