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
그게 너무 도움이되지 않습니까? tournamentID/matchID에 정의 된 기본 키를 사용하지 않고 플레이어 테이블을 만들려고합니다. 일반적으로 err150은 FK 열과 참조하는 키 사이의 데이터 형식 불일치와 관련이 있습니다. –