GitHub

https://github.com/Choidongjun0830

CS

4.1 데이터베이스의 기본

gogi masidda 2024. 9. 20. 16:29

'면접을 위한 CS 전공지식 노트' 책을 보며 공부한 내용입니다.

 

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

데이터베이스를 제어, 관리하는 통합 시스템을 DBMS(DataBase Management System)이라 한다.

특정 DBMS마다 정의된 쿼리 언어를 통해 삽입, 삭제, 수정, 조회 등을 수행할 수 있다. 

또한, 데이터베이스는 실시간 접근과 동시 공유가 가능하다.

 

데이터베이스 위에 DBMS가 있고 그 위에 응용 프로그램이 있다.

ex) MySQL이라는 DBMS가 있고, 그 위에 응용 프로그램에 속하는 Node.js나 php에서 MySQL의 DB의 데이터를 가져와 해당 데이터 관련 로직을 구축할 수 있다.

 

엔티티(Entity)

  • 사람, 장소, 물건 등 여러 개의 속성을 지닌 명사이다.
  • 예시
    • 이름, 아이디, 주소, 전화번호의 속성을 가진  회원 엔티티
    • 서비스의 요구 사항에 맞춰 속성이 정해진다.
  • 약한 엔티티와 강한 엔티티
    • 약한 엔티티: 고유 식별자가 없어 일반적으로 부모 엔티티와 관계를 나타내는 외래키를 사용하여 식별된다. 부모 엔티티와의 관계와 부모 엔티티의 키를 사용하여 이루어진다.
    • 강한 엔티티: 고유 식별자가 있다.
    • 예시
      • A가 혼자서는 존재하지 못하고 B의 존재 여부에 따라 종속적이면 A는 약한 엔티티, B는 강한 엔티티

릴레이션(Relation)

  • 데이터베이스에서 정보를 구분하여 저장하는 기본 단위이다.  엔티티에 관한 데이터를 데이터베이스는 릴레이션 하나에 담에서 관리한다.
  • 관계형 DB는 테이블, NoSQL DB는 컬렉션이라고 한다.
  • DB는 크게 관계형 데이터베이스와 NoSQL 데이터베이스로 나눌 수 있다.
  • 관계형 데이터베이스: MySQL 구조 -> 레코드 - 테이블 - 데이터베이스
  • NoSQL 데이터베이스: MongoDB 구조 -> 도큐먼트 - 컬렉션 - 데이터베이스

속성(Attribute)

  • 릴레이션에서 관리하는 구체적이며 고유한 이름을 갖는 정보이다.
  • 예시) 'Car'라는 엔티티의 속성: 색상, 차 번호, 차종, ...

도메인(Domain)

  • 릴레이션에 포함된 각각의 속성들이 가질 수 있는 값의 집합
  • 속성들이 가질 수 있는 값의 범위
  • 예시) 성별이라는 속성: {남, 여} 라는 도메인 

필드와 레코드

  • 테이블에 쌓이는 행 단위의 데이터를 레코드라 한다. 또한 레코드를 튜플이라고도 한다. 
  • 예시) 책이라는 엔티티를 정의 -> 속성: 책 제목, 저자, ISBN, 가격 출판 년도 => 속성에 맞는 타입 정의
    • 책 아이디: INT
    • 책 제목: VARCHAR(255)
    • 책 저자 아이디: INT
    • 책 출판 년도: VARCHAR(255)
    • 책 장르: VARCHAR(255)
    • 생성일시: DATETIME
    • 업데이트 일시: DATETIME
  • 타입은 데이터 베이스마다 차이가 있다.
  • 필드 타입 (MySQL 기준)
    • 숫자: TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT 등
    • 날짜: DATE, DATETIME, TIMESTAMP
      • DATE: 날짜 부분만. 1000-01-01 ~ 9999-12-31의 범위. 3바이트의 용량
      • DATETIME: 날짜 부분과 시간 부분. 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59의 범위. 8바이트의 용량
      • TIMESTAMP: 날짜부분과 시간 부분. 1970-01-01 00:00:01 ~ 2038-01-19 03:14:07의 범위. 4바이트의 용량
    • 문자: CHAR, VARCHAR, TEXT, BLOB, ENUM, SET
      • CHAR와 VARCHAR: 모두 그 안에 수를 입력해 몇자까지 입력할지 정함.
        • CHAR: CHAR(100)이면 고정 길이 문자열이라 10글자를 입력해도 100글자가 입력됨.
        • VARCHAR: VARCHAR(100)이면 가변 길이 문자열이라 10글자를 입력하면 10글자 해당 바이트 + 길이 저장용 바이트 1바이트가 저장됨.
        • => 유동적인 길이면 VARCHAR로 사용
      • TEXT와 BLOB: 모두 큰 데이터 저장에 사용
        • TEXT: 큰 문자열 저장에 쓰이며, 주로 게시판의 본문을 저장시에 사용한다.
        • BLOB: 이미지, 동영상 등 큰 데이터 저장에 씀. 그러나 보통은 아마존의 이미지 호스팅 서비스인 S3를 이용하는 등 서버에 파일을 올리고, 파일에 대한 경로를 VARCHAR로 저장
      • ENUM과 SET: 문자열 열거 타입
        • ENUM: ENUM('x-small', 'small', 'medium', 'large', 'x-large')의 형태로 쓰이며 이 중에서 하나의 값만 선택 가능하다. ENUM을 쓰면 'x-small' 등이 0, 1 등으로 매핑됨. => 메모리 절약
        • SET: ENUM과 비슷하지만 여러개를 선택 가능하다. 

관계

여러개의 테이블들 간의 관계. => 관계 화살표로 나타냄. 

N:M은 1:N과 1:M이라는 관계를 갖는 테이블 두개로 나눠서 설정한다. 

 

  • 슈퍼키: 유일성을 가짐
  • 후보키: 슈퍼키의 유일성에 최소성까지 가짐
  • 후보키 중에서 기본키로 선택되지 못한 것은 대체키가 된다. 
    • 유일성: 중복x
    • 최소성: 필드를 조합하지 않고 최소 필드만 써서 키를 형성할 수 있는 것. 
  • 기본키(Primary Key, PK): 유일성과 최소성을 만족. 테이블의 데이터 중 고유하게 존재하는 속성이며 기본키에 해당하는 데이터는 중복되면 안된다.
    • 자연키: 예를 들어 유저 테이블을 만든다고 하면, 이름, 주민등록번호, 성별 등이 있는데 여기서 주민등록번호는 유일성을 만족한다.
      • => 중복된 값들을 제외하며 중복되지 않는 것을 자연스레 뽑다가 나오는 키를 자연키라고 한다. 자연키는 언젠가 바뀌는 속성을 갖고 있다.
    • 인조키: 인위적으로 유저 아이디를 만들어 키로 사용한다. 인조키는 변하지 않는다.
    • 보통 기본키는 인조키를 사용한다. 
  • 외래키(Foreign Key, FK): 다른 테이블의 기본키를 그대로 참조하는 값. 개체와의 관계를 식별하는데 사용한다. 외래키는 중복되어도 된다.
  • 후보키(Candidate Key): 기본키가 될 수 있는 후보들. 유일성과 최소성을 동시에 만족한다.
  • 대체키(Alternate Key): 후보키가 두개 이상일 경우 어느 하나를 기본키로 지정하고 남은 후보키들을 말한다.
  • 슈퍼키(Super Key): 유일성을 갖춘 키이다. 
728x90

'CS' 카테고리의 다른 글

4.3 트랜잭션과 무결성  (0) 2024.09.24
4.2 ER Diagram과 정규화 과정  (6) 2024.09.22
3.4 CPU 스케줄링 알고리즘  (1) 2024.09.19
3.3 프로세스와 쓰레드  (1) 2024.09.17
3.2 메모리  (4) 2024.09.15