안녕하세요 <div><br></div> <div>MYSQL에서 다음과 같은 테이블을 만들었는데... 중복되는 데이터를 막기 위해서 어떤 조치를 취해야할지 감이 안잡히네요...</div> <div><br></div> <div>이름, 과목, 성적</div> <div>홍길동, 국어, 100</div> <div>홍길동, 영어 90</div> <div>홍길동, 수학 10</div> <div>철수, 국어 90</div> <div>철수, 영어 10</div> <div>영희, 국어 50</div> <div><br></div> <div>이러한 내용을 가지고 있는 테이블이 있습니다.</div> <div><br></div> <div>이름과 과목은 중복이 됩니다. 과목의 종류가 많아서 과목별로 테이블을 나누는 방법도 별로 여의치 않습니다.</div> <div><br></div> <div>성적 컬럼이 간단히 표현하기 위해 1개로 했지만 20개 정도의 점수 컬럼이 있습니다.</div> <div><br></div> <div>데이터를 가져올때는 "홍길동의 점수를 오름차순으로", "철수의 점수를 오름차순으로" 불러와서 과목 순서를 사용자에게 보여줍니다.</div> <div><br></div> <div>SELECT * FROM `디비`.`테이블` WHERE `이름`='홍길동' ORDER BY `성적`;</div> <div>국어 100</div> <div>영어 90</div> <div>수학 10</div> <div><br></div> <div><br></div> <div>1. 테이블을 분리할 수 있을까?</div> <div>정규화를 어떻게 해야하는지 감이 안잡히더라구요 ㅠㅠ</div> <div>홍길동->국어</div> <div>국어->100</div> <div>?! 이렇게 하면 안되는 거고...</div> <div>홍길동->100</div> <div>100->국어</div> <div>?! 이것도 안되는 거구요..</div> <div><br></div> <div>제가 잘못 생각하고 있는걸까요?</div> <div><br></div> <div><br></div> <div>2. 프로그램 단위에서 데이터 중복을 피하는 방법</div> <div>if((UPDATE ~~ WHERE 이름=홍길동 AND 과목=국어)== FALSE)</div> <div> INSERT ~~</div> <div>로 하였으나... 홍길동, 국어 라는 데이터가 없더라도 UPDATE는 TRUE를 리턴해서 실패.</div> <div><br></div> <div>if(INSERT ~~ == FALSE)</div> <div> UPDATE ~~</div> <div>로 하였으나, 당연히 중복으로 데이터가 들어가므로 이 방법도 실패.</div> <div><br></div> <div><br></div> <div>3. 결국 생각해낸 방법은..</div> <div>프로그램 단에서..</div> <div>if ((SELECT * FROM ~~) >= 1) 결과값이 1개이상 존재한다면,</div> <div> UPDATE ~~~</div> <div>else 결과값이 존재하지 않는다면</div> <div> INSERT ~~~</div> <div><br></div> <div>이렇게 생각하게 되었습니다.</div> <div><br></div> <div><br></div> <div>3번 방법 말고는 다른 묘안이 없을까요?</div> <div><br></div> <div><br></div> <div>공부하는 중인데 딱히 물어볼 선배가 없네요 ㅠㅠㅠ</div>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.