我试图设计一个数据库,我正在使用PHP的一个小项目。我没有太多的使用数据库的经验(正如你很快会注意到的那样),所以现在我已经把自己放在了很深的一端。err(150) - 设计基本关系数据库的麻烦
我正在开发一个数据库,它将成为我用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脚本,我收到犯错150,我觉得有话跟我的主键/在球员表的外键引用:
Old tables dropped
TOURNAMENT created...
MATCH created...
Can't create table 'stats.players' (errno: 150)
我已经做了一些阅读,看着以前的一些问题,但我真的不明白摆在首位的实际问题(原因的错误发生)。显然,我的数据库的设计是不正确的,但我不知道我应该如何处理改进和修复它。
请帮忙。
什么是您收到确切的错误? –
无法创建表'stats.players'(errno:150) – anditpainsme
这不太有用,是不是?尝试创建球员表_without_在tournamentID/matchID上定义的主键。通常,err150涉及FK列与其引用的键之间的数据类型不匹配。 –