<키 성질>
최소성: 꼭 필요한 최소한의 속성으로 키를 구별하는 속성
유일성: 하나의 키 값으로 각각의 튜플을 식별할수 있는 속성
슈퍼키: 최소성 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
'💻 Backend' 카테고리의 다른 글
RESTful API에 대한 이해 (0) | 2021.11.07 |
---|---|
서버 5주차 정리 [키워드 정리] (0) | 2021.10.31 |
서버 4주차 정리 - DB에 관하여 - (1) (0) | 2021.10.17 |
서버 3주차 - OS와 AWS에 대하여 (0) | 2021.10.10 |
서버 스터디 2주차 [키워드 정리] - (2) (0) | 2021.10.10 |