Tany
백문이불어일Tany
Tany
전체 방문자
오늘
어제
  • 분류 전체보기 (197)
    • JAVA TPC (1)
    • JAVA (10)
    • CS (3)
    • SPRING (5)
    • DFS BFS (12)
    • SQL (7)
    • 알고리즘 정리 (76)
    • Git, Github (3)
    • 학습 계획 (36)
    • 코드스쿼드 학습일지 (19)
    • Servlet (5)
    • VPC (2)
    • AWS (4)
    • JPA (5)
    • 취미생활 (2)
    • 프로젝트 기록 (7)
      • Issue Tracker 삽질 기록 (5)
      • 당근마켓 API 서버 기록 (2)
      • 나만의 블로그 제작 기록 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 재귀
  • 알고리즘
  • MySQL
  • JPA
  • Stack
  • 해시
  • dfs
  • java
  • JSP
  • 프로그래머스
  • GIT
  • 면접을 위한 CS 전공지식 노트
  • EC2
  • 정렬
  • github
  • 이분탐색
  • sql
  • BFS
  • hash
  • 완전탐색
  • 자바
  • 백준
  • 문자열
  • 주간 학습 계획
  • 이코테
  • 인프런
  • MVC
  • 파이썬
  • 자료구조
  • AWS

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Tany

백문이불어일Tany

데이터베이스의 기본
CS

데이터베이스의 기본

2022. 9. 15. 17:52

면접을 위한 CS 전공지식 노트를 읽고 중요하다고 생각되는 부분을 정리합니다.

 

 

 


 

 

 

데이터베이스란 ?

데이터베이스는 일정한 규칙, 규약을 통해 구조화되어 저장되는 데이터의 모음

이런 DB 를 관리하는 통합 시스템을 DBMS (DataBase Management System) 이라고 하며 여러 DBMS 마다 정의된 쿼리 문법을 통해

CRUD 를 수행할 수 있다. 

 

1.필드 타입

필드는 항상 타입을 갖는데 여러가지 타입이 있지만 날짜 타입과 문자 타입을 정리해보자.

 

1-1. 날짜 타입

3 가지의 타입이 있고 가장 많은 시간대를 지원하고 가장 큰 용량을 차지하는 타입은 DATETIME 이다.

DATA 시간범위 미포함
1000-01-01 ~ 9999-12-31 
3Byte
DATETIME 날짜 및 시간범위 모두 포함
1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 까지 지원
8Byte
TIMESTAMP 날짜 및 시간범위 모두 포함
1970-01-01 00:00:00 ~ 2038-01-19 03:14:07 까지 지원
4Byte

 

 

1-2. 문자 타입

CHAR, VARCHAR, TEXT, BLOB, ENUM, SET 타입이 존재한다.

ENUM, SET 타입은 다른 타입에 비해 사용 빈도가 적으므로 그런게 있다 정도만 알고 넘어가기로 했다.

CHAR, VARCHAR CHAR 은 테이블을 생성할 때 선언한 길이로 고정된다.
길이는 0 ~ 255 사이의 값을 가질 수 있다.
VARCHAR 은 고정이 아닌 가변 길이 문자열이다.
즉, 입력된 데이터에 따라 용량을 가변시켜 저장하는 타입
길이는 0 ~ 65,535 사이의 값을 가질 수 있다.
글자에 해당하는 Byte + 길이기록용 1Byte 로 저장한다.
TEXT, BLOB
BLOB 은 이미지, 동영상 등 큰 데이터 저장에 사용
AWS S3 를 사용하는 경우 이미지 경로 등을 VARCHAR 에 저장해서 자주 사용하지는 않는다.
TEXT 는 큰 문자열 저장에 쓰며 주로 게시판의 본문을 저장할 때 사용

 

 

 

2. 키 (KEY)

테이블 간의 관계를 명확히 하고 테이블 자체의 인덱스를 위해 설정된 장치 (인덱스에 대해선 다른 포스팅에 따로 기록)

슈퍼키, 후보키, 기본키, 대체키, 외래키 가 존재한다.

키를 알아보기 전에 자주나오는 용어인 유일성, 최소성에 대해 먼저 알아보자.

해시넷) http://wiki.hash.kr/index.php/%EB%8C%80%EC%B2%B4%ED%82%A4

 

2-1. 유일성이란 ?

하나의 키 값으로 레코드를 유일하게 식별할 수 있는 성질을 뜻한다.

예를들어 유저라는 엔티티가 있다고 가정했을 때, 이름, 나이, 취미, 주민번호 등의 속성을 가질 수 있고 여기서 주민번호를 제외한 다른

속성들은 충분히 중복될 수 있는 여지가 있는데, 여기서 주민번호 속성만이 유일성을 가지는 속성이라고 할 수 있다.

 

 

2-2. 최소성이란 ?

키를 구성하는 속성들 중 꼭 필요한 최소한의 속성들로만 키를 구성하는 성질을 뜻한다.

쉽게말해 키를 구성하는 각 속성들이 각 레코드를 구별하는데 꼭 필요한 속성들로만 구성되어있는가 ? 를 뜻한다.

위와 똑같은 속성을 가진 엔티티를 예시로 본다면, 주민번호를 통해 레코드를 식별할 수 있는데 굳이 중복될 수 있는 이름, 나이, 취미 등을 

섞어서 키를 만들 필요가 없다. 이 때 주민번호는 최소성을 가지는 속성이라고 할 수 있다.

 

 

2-3. 기본 키 (Primary Key)

흔히 PK 라고 말하는 키이며 유일성과 최소성을 만족하는 키.

기본 키는 단일 기본키, 복합 기본키가 있으며 모두 유일성과 최소성을 만족해야 한다.

또한 기본 키는 자연키와 인조키로 구분할 수 있다. 조금 더 알아보자.

자연키 자연 키는 언젠가는 변하는 속성을 지닌다.

이름, 나이, 취미, 주민번호 속성 중 주민번호가 기본 키가 될 수 있는데, 이처럼 중복된 값들을 제외하며 중복되지 않는 것을 자연스레 뽑아 나온 키라고 해 자연 키 라고 한다. 
인조키 인조 키는 자연 키와 다르게 변하지 않는다.
따라서 보통 기본 키는 안전하게 인조 키로 설정하는 경우가 많다.

MySQL 기준 Auto_Increment 를 사용, 인위적으로 생성한 키를
인조 키라고 한다.

 

 

2-4. 외래 키 (Foreign Key)

흔히 FK 라고 말하는 키이며 다른 테이블의 기본 키를 그대로 참조하는 값으로, 개체와의 관계를 식별하는 사용한다.

A 와 B 라는 테이블이 있다고 했을 때, A 테이블의 속성이긴 하지만 B 테이블의 기본 키를 참조하고 있는 키이다.

아래 User, Car 테이블을 참고하면 Car 테이블은 User 테이블의 기본 키인 ID 를 참조하여 자신의 외래 키 User_Id 로 설정한 것을 확인 할 수 있다. 이걸 Car 테이블은 User 테이블을 참조하고 있다고 하며, 보다 싶이 외래 키는 중복되어도 상관 없다.

 

User Table

ID Name PhonNumber
A_1 김철수 010-1234-5678
A_2 김영희 010-3232-4555

 

Car Table

ID User_Id CarName
1 A_1 BMW 5
2 A_1 아우디 A6
3 A_2 미니쿠페

 

 

 

2-5. 후보 키 (Candidate Key)

후보 키는 기본 키가 될 수 있는 기본 키의 후보들이며 기본 키의 조건을 만족하고 있는 키를 말한다.

따라서 당연히 유일성과 최소성을 동시에 만족한다.

 

 

2-6. 대체 키 (Alternate Key)

대체 키는 후보 키가 두 개 이상일 경우 어느 하나를 기본 키로 지정하고 남은 후보 키를 말한다.

A Key 와 B Key 두 개의 후보 키가 있고 B Key 를 기본 키로 지정했을 때, 남은 A Key 가 대체 키가 된다.

역시 유일성과 최소성을 동시에 만족한다.

 

 

2-7. 슈퍼 키 (Super Key)

슈퍼 키는 각 레코드를 유일하게 식별할 수 있는 유일성만을 갖춘 키를 말한다.

후보 키와 동일하나 최소성은 상관하지 않는 특징이 있다.

'CS' 카테고리의 다른 글

ERD와 정규화 과정  (0) 2022.09.15
Web Server 와 Web Application Server  (0) 2022.09.08
    'CS' 카테고리의 다른 글
    • ERD와 정규화 과정
    • Web Server 와 Web Application Server
    Tany
    Tany
    내가 보려고 만드는 백엔드 기록장 Github https://github.com/juni8453

    티스토리툴바