2013-12-19 4 views
0

두 개의 테이블이 있습니다. 하나는 '명'이고 다른 하나는 '결과'입니다.중복 키 값이 고유 제한 조건을 위반하지만

명에는 ID와 플레이어 이름이 있습니다.

결과에는 ID, playerID 및 점수와 시간이 있습니다.

그것은 (같은 선수가 여러 점수를 수 있기 때문에) 결과에서 "playerID는"고유하지 않을 것을 나에게 논리적 인 것 같다,이 쿼리를 실행할 때 비록 :

insert into results (playerid, score, time) values 
((select id from persons where playername = 'Dylan'),100,100); 

을 나는 오류가

ERROR: duplicate key value violates unique constraint "results_playerid_key" 
DETAIL: Key (playerid)=(1) already exists. 

아마도 데이터베이스에 오류가 있습니까? (데이터베이스는 내 대학의 여러 강사가 관리하므로 설정을 변경할 방법이 없습니다.)

당신이 제공 할 수있는 통찰력을 주셔서 감사합니다.

+1

아니요. 잠재적으로 설계/개념상의 오류가 아니라면 데이터베이스에 오류가 아닙니다. 열에 고유 한 제한 조건이 있으므로 열에 중복 값을 삽입 할 수 없습니다. 해당 제약 조건을 원하지 않으면 제거해야합니다 – Clive

+0

@Clive 예 질문이 명확하지 않은 경우 유감입니다. 제약 조건이 데이터베이스에 있다는 것을 알고 있지만 디자인에 오류가있을 수 있다고 생각했습니다! 감사! –

답변

1

비록 논리적으로 보일지 모르지만 (아마도 나에게) DB를 관리하는 사람들에게는 논리적이지 않을 수도 있으므로 playerid에 제약 조건을 고유하게 두었을 수도 있습니다.

아마도 실수가 있었고 id을 자동 증가 기본 키로 설정하고 싶었습니까? 스키마를 조사해도 변경할 수없는 제약 조건이 무엇인지 확인할 수 있습니까?

DB 뒤에있는 아이디어는 실제로 플레이어 당 하나의 결과를 얻는 것입니다. 비즈니스 또는 응용 프로그램 로직이 잠재적으로이 선택 뒤에 앉아 있다는 것을 알고 있습니까?

+0

답변 해 주셔서 감사합니다. 몇 가지 이유 때문에 내 쿼리가 잘못되었는지 확인해야했습니다. 다른 필드에 자동 증가 ID가 있습니다. "당신은 peope에게 논리적으로 들리지 않습니다."에 대해 좋은 지적을했습니다. 그래서 나는 강사 중 한 명에게 편지를 보내 키의 유일한 제약 조건을 가진 논리에 대해 자세히 설명 할 수 있는지 묻습니다. 감사합니다. –

0

결과 테이블의 외래 키 이름을 "playerid"가 아닌 이름으로 변경하려고 했습니까 (player_id 또는 player_no를 사용하겠습니까)? 또한 결과 테이블에서 고유 한 값으로 설정되지 않은 숫자인지 확인하십시오.

관련 문제