본문 바로가기
WEB

[WEB] 05. SQL 정규화

by ssunooo 2024. 8. 14.

 

 

<대학교입학 테이블>
학번    이름   과   동아리   전공
1                           101
2                           104
3                           104
4                           103
5                           102
6                           102
7                           102




<동아리 테이블>
동아리번호    동아리명
101                 축구부
102                 야구관람부
103                 농구부
104                 축구관람부


데이터 관리의 편의성을 증진시키기위해서 테이블을 분리하는것을 정규화라고한다.
변경사항이 발생했을 때, 1곳만 변경 가능하기 때문에 분리한다,

그로 인해 응집도가 높고 결합도가 낮으며 유지보수에 용이해진다.

회원
회원번호   ID   이름   PW   총구매금액
1   teemo   티모      1000
2      아리      100001
3      아무무      500100
4      모르가나      200000

등급
PK   등급명   최소범위   최대범위
1   브론즈   0   9999
2   실버   10000   99999
3   골드   100000   499999


특정 컬럼이 존재하지 않아도 그 컬럼값을 예상할 수 있음 == "데이터 중복 발생"
DBMS : 데이터 중복은 DB내에 없어야한다!!!

데이터 중복을 피하기 위해서 "정규화" 실행 == 테이블 분리



Q1) 정규화가 뭐에요?
데이터 중복을 피하기 위해서 테이블을 분리하는 것입니다.


Q2) DB 설계할 때 가장 중요하게 생각한 것은 무엇인가요?
데이터의 중복 발생을 예방하는 것입니다.
그래서 정규화를 다양하게 진행했습니다.


Q3) 코딩 테스트
테이블 정규화 
JOIN 문법의 사용
서브 쿼리


Q4) FK가 왜 상대 테이블의 PK여야하나요?
NAME으로 하면, 똑같은 이름을 가진 사용자를 구분할 수 없기 때문에
PK가 아닌 컬럼으로 설정하면, UNIQUE 하지 않아서 구분할 수 없기 때문입니다.
ex) 010-1234-1234 전화번호 떠올리기!



JOIN(조인)문
FK의 값을 보고 외부 테이블의 값을 끌어오는 SQL 문법이다.

 

ex)

SELECT 동아리 FROM 대학교;

SELECT (JOIN으로 가져온 외부 테이블의 값) AS 동아리명 FROM 대학교;


 >> 101

>> 서브쿼리(쿼리문  안에 또 다른 쿼리문이 존재하는 형태)



JOIN M.NAME 이 끌어올 데이터 없다.
 결과에 (rs) 포함 x >>> NPE

상대가 NULL인 데이터도 JOIN 목록에 포함시켜야한다.
=> LEFT JOIN

내가 NULL인 데이터도 JOIN 목록에 포함시켜야한다.
=> RIGHT JOIN


LEFT JOIN을 사용하면 NULL값인 데이터도 가져오기 때문에 오류 발생
=> NVL을 사용하여 NULL이면 대신 출력할 문구 작성한다.

거의 모든 페이지는 뭔가 데이터를 보여주려고 한다.
C에서 데이터를 받아왔어야만 한다.


결론)

처음 시작을 View에서 하는것이 아니고 C에서 시작한다. 

그러려면 index.jsp (표지페이지) 가 반드시 필요하다.