[CS] 데이터베이스의 기본

최지나·2024년 1월 8일
1

CS

목록 보기
43/55

정의

데이터베이스 = 체계적으로 데이터를 저장하고 관리하는 시스템. DBMS(데이터베이스 관리 시스템)를 통해 데이터에 대한 접근 및 관리가 가능하며, 실시간 접근성과 동시 공유의 특성을 가짐

구성

엔티티(Entity)

  • 데이터베이스에서 표현하려는 항목으로, 사람, 장소, 물건 등과 같이 속성을 가지는 실체. 예를 들어, '회원' 엔티티에는 이름, 아이디, 주소 등의 속성이 존재.

릴레이션(Relation)

  • 릴레이션은 데이터베이스에서 정보를 구분하여 저장하는 단위로, 엔터티에 대한 데이터를 저장. 관계형 데이터베이스에서는 '테이블', NoSQL 데이터베이스에서는 '컬렉션'으로 불린다

속성(Attribute)과 도메인(Domain)

  • 속성은 릴레이션에서 관리하는 구체적 정보로, 각각의 엔티티가 가지는 세부사항. 도메인은 속성이 가질 수 있는 값의 집합을 의미합니다.

필드 타입

숫자형

  • int: 일반적으로 정수를 저장하는 데 사용.

날짜 타입

  • DATE: 날짜 정보만 저장
  • DATETIME: 날짜와 시간 정보를 모두 저장
  • TIMESTAMP: 유닉스 타임스탬프를 이용하여 날짜와 시간을 저장

문자 타입

  • CHAR: 고정 길이 문자열을 저장
  • VARCHAR: 가변 길이 문자열을 저장

대용량 데이터 타입

  • TEXT와 BLOB은 각각 큰 문자열과 바이너리 데이터(이미지,동영상)를 저장하는 데 사용됨
    • blob의 경우 아마존의 호스팅 서비스인 S3를 이용하는 등 서버에 파일을 올리고, 파일에 대한 경로를 varchar로 저장하는 방식을 사용 (CDN, content delivery network를 사용)

열거형 데이터 타입

  • ENUM과 SET은 제한된 문자열 집합에서 선택하는 데 사용

데이터베이스의 키와 관계

관계

데이터베이스의 테이블은 서로 연관성을 가지며, 이러한 관계를 1:1, 1:N, N:M 등으로 표현

  • N:M 관계의 경우 중간 테이블을 생성

키는 테이블에서 데이터를 식별하거나 데이터 간의 관계를 정의하는데 사용되는 개념

키의 종류설명
기본키각 행을 유일하게 식별할 수 있는 속성. 유일성과 최소성 필요.
자연키데이터 내에서 자연스럽게 발생하는 유일 속성을 이용한 기본키.
인조키시스템에서 생성된 유일성을 가진 값(예: 자동 증가 번호). 기본키로 자주 사용됨.
외래키다른 테이블의 기본키를 참조하는 속성. 두 테이블 간의 관계를 정립.
후보키기본키가 될 수 있는 속성들의 집합. 모두 유일성과 최소성을 만족.
대체키후보키 중 기본키로 선택되지 않은 키들.
슈퍼키각 행을 유일하게 식별할 수 있는 하나 이상의 속성 집합. 최소성은 만족하지 않을 수 있음.

ERD(Entity-Relation Diagram)

ERD는 데이터베이스 설계의 첫걸음으로, 엔티티 간의 관계와 구조를 시각적으로 나타냄. 이를 통해 시스템의 데이터 구조를 명확하게 이해

  • 예시

조인(Join)

두 개 이상의 테이블을 묶어서 하나의 결과물을 만드는 것

  • NoSQL (ex MongoDB)의 경우 관계형 데이터베이스에 비해 Join이 성능이 떨어지기 때문에, 여러 테이블을 조인하는 작업이 많을 경우 MongoDB 보다는 관계형 데이터베이스를 사용해야 한다

조인의 종류

조인의 원리

중첩 루프 조인, 정렬 병합 조인, 해시 조인

  • 중첨 루프 조인: 중첩된 for문과 유사하게, 첫 번째 테이블의 각 행을 순차적으로 읽으면서, 두 번째 테이블의 행과 조건을 비교해 일치하는 레코드를 찾음, 랜덤 엑세스 비용이 높아 대규모 테이블에서는 비효율적

  • 정렬 병합 조인 : 조인할 필드를 기준으로 각 테이블을 먼저 정렬한 뒤, 조인을 수행. 적절한 인덱스가 없고 대용량 테이블을 조인할 때, 비교 연산자 <,>를 사용하는 조건에서 유용

  • 해시 조인: == 조건에서 사용. 두 테이블 중 더 바이트가 작은 테이블을 해시 테이블로 만들어 조인을 수행, 효율적인 메모리 사용을 통한 빠른 조인 성능


REF

profile
의견 나누는 것을 좋아합니다 ლ(・ヮ・ლ)

0개의 댓글