[TIL: 0406] 정규형, JOIN

ryun·2023년 4월 10일
0

TIL

목록 보기
34/34

테이블 나누는 이유

  • 데이터 베이스 중복 >
    데이터 베이스 용량 증가 >
    돈이 더 많이 나간다
  • 고객 정보 바뀌었을 때 고객 테이블만 변경하면 더 좋다

데이터베이스 정규형

  • 데이터베이스를 구조화하는 방법론
  • 데이터 중복 최소화하고 일관성과 무결성 보장
  • 데이터 구조를 더 좋은 구조로 바꾸는 것

시험 최대한 X

제 1정규형

하나의 속성값이 복수형을 가지면 안됨
하나의 속성에는 값이 하나만 들어가야 한다

제 2정규형

테이블의 테마와 관련 없는 컬럼은 다른 테이블로 분리

테이블에서 부분 함수적 종속성을 제거한 것
즉, 키가 아닌 속성이 기본키의 일부분에 종속되는 것

  • 강사가 운동이라는 부하를 데려오면 안된다 (끊어놔야함)

테이블의 테마가 맞지 않으면 아래처럼 분리

제 3정규형

다른 속성에 의존하는 속성은 따로 분리

  • 왼쪽은 종속 없음
  • 오른쪽에서 운동은 강사명(pk)에 종속되지만 금액은 운동에 종속됨, 그러면 분리


(중복 들어간 값 빼고 보기)

JOIN

테이블이 여러 개다 보니 조회할 때 여러 개의 테이블을 가져와서 확인해야 한다
이를 해결하기 위해 테이블 연결하는 것이 필요
(= 두 개 이상 테이블에서 데이터를 가져와 결함하는 것)

테이블 합치기

CROSS JOIN (많이 안씀)

articles의 userId와 users의 id가 같은 것만 원한다
SELECT FROM articles, users WHERE articles.userId = users.rowId;
SELECT
FROM articles, users WHERE userId = users.rowId; (이렇게도 가능)

INNER JOIN

테이블 1 INNER JOIN 테이블 2 ON 조건식
SELECT * FROM articles INNER JOIN users ON userId=users.rowId;

LEFT (OUTER) JOIN

가져올 때 값이 없을 때 빈 값을 가져오도록 하는 것

SELECT * FROM articles LEFT JOIN users
ON userId = users.rowid;
아티클은 다 가져오고 조건에 맞으면 땡겨와서 넣어주고 없으면 빈 값으로 처리

RIGHT (OUTER) JOIN

SELECT * FROM articles RIGHT JOIN users
ON userId = users.rowid;

정리

0개의 댓글