게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
MYSQL 기본키에 관련된 질문...
게시물ID : programmer_13543짧은주소 복사하기
작성자 : 물어라이코스
추천 : 0
조회수 : 492회
댓글수 : 8개
등록시간 : 2015/09/27 23:28:40
옵션
  • 베스트금지
  • 본인삭제금지
안녕하세요

MYSQL에서 다음과 같은 테이블을 만들었는데... 중복되는 데이터를 막기 위해서 어떤 조치를 취해야할지 감이 안잡히네요...

이름, 과목, 성적
홍길동, 국어, 100
홍길동, 영어 90
홍길동, 수학 10
철수, 국어 90
철수, 영어 10
영희, 국어 50

이러한 내용을 가지고 있는 테이블이 있습니다.

이름과 과목은 중복이 됩니다. 과목의 종류가 많아서 과목별로 테이블을 나누는 방법도 별로 여의치 않습니다.

성적 컬럼이 간단히 표현하기 위해 1개로 했지만 20개 정도의 점수 컬럼이 있습니다.

데이터를 가져올때는 "홍길동의 점수를 오름차순으로", "철수의 점수를 오름차순으로" 불러와서 과목 순서를 사용자에게 보여줍니다.

SELECT * FROM `디비`.`테이블` WHERE `이름`='홍길동' ORDER BY `성적`;
국어 100
영어 90
수학 10


1. 테이블을 분리할 수 있을까?
정규화를 어떻게 해야하는지 감이 안잡히더라구요 ㅠㅠ
홍길동->국어
국어->100
?! 이렇게 하면 안되는 거고...
홍길동->100
100->국어
?! 이것도 안되는 거구요..

제가 잘못 생각하고 있는걸까요?


2. 프로그램 단위에서 데이터 중복을 피하는 방법
if((UPDATE ~~ WHERE 이름=홍길동 AND 과목=국어)== FALSE)
  INSERT ~~
로 하였으나... 홍길동, 국어 라는 데이터가 없더라도 UPDATE는 TRUE를 리턴해서 실패.

if(INSERT ~~ == FALSE)
  UPDATE ~~
로 하였으나, 당연히 중복으로 데이터가 들어가므로 이 방법도 실패.


3. 결국 생각해낸 방법은..
프로그램 단에서..
if ((SELECT * FROM ~~) >= 1) 결과값이 1개이상 존재한다면,
  UPDATE ~~~
else 결과값이 존재하지 않는다면
  INSERT ~~~

이렇게 생각하게 되었습니다.


3번 방법 말고는 다른 묘안이 없을까요?


공부하는 중인데 딱히 물어볼 선배가 없네요 ㅠㅠㅠ
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호