[DB] 정규화와 서브쿼리

Na young·2024년 1월 12일
0

DB

목록 보기
7/17

13. 정규화

13.1. 정규화

데이터 중복을 방지하기 위해 사용하는 모델링 기술

이상현상이 있는 릴레이션을 분해하여 이상현상을 없애는 과정

  • 제 1 정규형 (1NF) 한 컬럼에는 하나의 속성만 가져야함 하나의 컬럼은 같은 종류나 타입이여야함 각 컬럼이 유일한 이름을 가져야함 컬럼의 순서가 상관 없어야함
  • 제 2 정규형 (2NF) 1NF를 만족해야함 모든 컬럼이 부분적 종속이 없어야함 → 직접적인 종속이어야
  • 제 3 정규형 (3NF) 2NF를 만족해야함 기본키를 제외한 속성들 간의 이행 종속성이 없어야함 예, 민영이는 VIP, VIP는 그라운드, 민영이를 검색하면 그라운드라는 값이 나옴. 왜냐면 민영 - VIP - 그라운드 이렇게 연결 되어있어서. 3NF 위반. 민영-VIP / VIP - 그라운드 이렇게 테이블을 나눠야함
  • BCNF 3NF의 강화버전 모든 결정자가 후보키 집합에 속해야 함 예, 나영이는 일반석, 민영이는 일반석, 근데 나영이가 가는 일반석은 플로어, 민영이가 가는 일반석은 1층. 이 때 일반석은 두가지의 경우를 가지니까 종속성이 성립 X 하지만 플로어(OR 1층)이 일반석인건 알 수 있으니까 이 방향의 종속성은 성립함 즉, 플로어 (후보키 X) 같은 컬럼이 결정자가 되어버렸으니 BCMF 위반. (3NF 까진 성립) BCMF를 만족하려면 (일반석이 왼쪽으로) 나영 - 일반석 / 플로어 - 일반석 민영 - 일반석 / 1층 - 일반석

13.2. 감성 개체 집합 VS 약성 개체 집합

13.3. 참여제약조건

13.4. 일반화 VS 구체화

13.5. 첸의 표기법

14. 서브쿼리

14.1 서브쿼리

하나의 SQL문 안에 포함되어 있는 또 다른 SQL문

select count(emp_no) from salaries where salary in (select salary from salaries
where emp_no='10001');
//샐러리 테이블에서 10001번 직원의 급여를 가져온 다음, 샐러리 테이블에서 급여가 같은 사원의 수를 출력함

select count(*) from city where CountryCode = 
 (select Code from country where Name=‘South Korea’)

//컨트리 테이블에서 SOUTH KOREA 인 코드를 가져온 다음, 시티 테이블에서 이에 해당되는 도시의 수를 표시

select Name, Population from city where Population > (select avg(Population) from city 
where code=’KOR’) order by Population desc;
//도시 테이블에서 코드가 KOR인 도시의 평균인구보다 많은 도시를 내림차순 정렬하시오

select CountryCode, count(*) from city where CountryCode IN (select Code from country 
where Name in ('South Korea','China','Japan')) group by CountryCode;

//국가명이 코리아 차이나 재팬인 국가코드를 찾아서 이에 해당되는 도시의 수를 표시하시오

15. 역정규화

15.1 역정규화

샤딩처럼 DB가 크면 조인이 불가능 한 경우나

속도향상을 위해 (EX. 기사 댓글 대댓글에 갯수 표시하는 것)

정규화를 포기하고 중복을 허용함

  • 역정규화를 허용하는 경우 데이터가 너무 커서 한 시스템에 저장이 안되는 경우 조인을 하면 더 큰 데이터 공간이 필요하..
profile
개발어린이

0개의 댓글

관련 채용 정보