💻 Backend

서버 4주차 정리 - DB에 관하여 - (2)

미미누 2021. 10. 24. 20:42

<키 성질>

 

최소성: 꼭 필요한 최소한의 속성으로 키를 구별하는 속성

유일성: 하나의 키 값으로 각각의 튜플을 식별할수 있는 속성


슈퍼키: 최소성 X, 유일성 O 

이름, 나이는 겹치지 않기 때문에 슈퍼키로 설정 가능하다.

 

후보키: 최소성 O, 유일성 O

이름+나이의 경우 (속성이 2개이기 떄문에 최소성 만족 하지 않는다.)

 

기본키 : 테이블의 각 레코드(테이블에서 행을)을 고유하게 식별하는 역할

  • 테이블에서 기본키 한개를 설정할 수 있음
  • 기본키는 널값과 중복된 값을 가질수 없음

 

기본키 : 대체키 , 외래키라고도 불림


 

대체키: 기본키로 선정되지 않은 후보들

 

외래키: 테이블이 다른 테이블을 참조해서 DB 연결

  • 예) 수강 Table에서 학생 Table의 값을 가져옴
  • 참조할 값은 기본키로 설정되어야 함

 

학생 Table: 부모키의 학번(외래키)

수강 Table: 자식키

기본키: PK

외래키: FK

 


  • 키는 각각의 튜플을 식별함
  • 하나의 테이블에는 하나의 키가 존재해야 함
  • 모든 테이블에서는 고유의 키값 존재한다

 

테이블을 대표하는 값: 프라이머리 키(기본 키 : PK)

PK는 어떤 칼럼에 설정할수 있음 (PK는 중복될 수 없음)

 

출석부의 이름과 학과를 성적부를 가져올 수 있음(성적부는 출석부를 참조하고 있다. 학번은 FK(외래키)라고 불림)

참조값은 해당 테이블의 PK값으로 설정하는게 좋음

 


<PK 설정법>

 

<키 설정 예시>

  • DB의 주민등록번호를 삭제 해야 겠다 → 개개인의 고유값을 PK로 설정해 놨음
  • FK는 PK를 참조함.  (하나의 PK를 삭제하면 다른 테이블은 참조 불가)

인덱스값을 따로 구현하는 것을 추천 → PK로 조정 (AUTO ingrement 설정하면 데이터가 삽입할때마다 인덱스가 증가)

ID(칼럼 추가해서 PK)

 

출석부의 경우 인덱스 칼럼을 만들어서 설계 (FK로 DB를 설계)

 


테이블간의 관계

 

1:1 관계

하나의 레코드가 다른 테이블의 레코드 하나와 연결되는 경우

 

1:N 관계

하나의 레코드가 서로 다른 레코드와 연결되는 경우

 

N:N관계

  • 여러개의 레코드가 다른 테이블의 여러개 레코드와 관계
  • 다대다 관계에서는 join 테이블 설정한다
  • customer, package 테이블이 있다면 두 개의 테이블과 각각 1:N 관계를 나타내는 새로운 테이블 생성

<SQL 쿼리문>

SELECT [컬럼 이름] : 조회할때 사용하는 명령어

FROM [테이블 이름] : 찾을 대상의 공간

WHERE [조건]

GROUP BY [그룹화할 컬럼]

HAVING [그룹화한 뒤 조건]

LIMIT [제한할 개수]

 

HAVING : 그룹화를 시킨 후에 결과에서 조건을 뽑아내는 기능(group by랑 having 을 묶어서)

LIMIT : 보여주는 결과 제한 (앱에서 상품들을 제공할때 페이징을 적용할때 LIMIT 적용)

JOIN : (테이블 연결하려면 하나의 컬럼을 공유하고 있어야함)

ORDER BY : 정렬, 날짜별로, 프라이스별로 정렬가능 (기본옵션: 오름차순, DESC 하면 내림차순)

GROUP BY : 직관적으로 컬럼 그룹화

유저 인덱스별로 그룹파일을 만들고 싶다 → GROUP BY

집계함수 COUNT(횟수), SUM(비용)


SELECT 샤프

FROM 서랍

WHERE 샤프심두꼐 ≥ 0.5 AND 색상 = '노란색'

SELECT COUNT(*)

SELECT SUM(price) 총 값

FROM Concert

GROUP BY userIdx

HAVING

ORDER BY date DESC

LIMIT 2; 

JOIN

INNER JOIN, LEFT , OUTER, RIGHT, FULL, CROSS