본문 바로가기

CS

4.1 데이터베이스의 기본

  • 데이터베이스는 일정한 규칙, 규약을 통해 구조화되어 저장되는 데이터의 모음이다.
  • 해당 데이터베이스를 제어, 관리하는 통합 시스템을 DBMS라고 하며, 데이터베이스 안에 있는 데이터들은 특정 DBMS마다 정의된 쿼리 언어를 통해 삽입, 삭제, 수정, 조회 등을 수행할 수 있다.
  • 데이터베이스는 실시간 접근과 동시 공유가 가능하다.

데이터베이스 위에 DBMS, 그 위에 응용 프로그램이 있으며 이러한 구조를 기반으로 데이터를 주고 받는다.

MySQL이라는 DBMS가 있고 그 위에 응용프로그램에 속하는 Node.js나 php에서 해당 데이터베이스 안에 있는 데이터를 끄집어내 관련 로직을 구축한다.

 

4.1.1 엔터티

  • 사람, 장소, 물건, 사건, 개념 등 여러 개의 속성을 지닌 명사를 의미
  • ex) 회원이라는 엔터티가 있을 때 회원은 이름, 아이디, 주소, 전화번호의 속성을 가진다.
  • 서비스의 요구사항에 맞춰 속성이 정해짐

약한 엔터티와 강한 엔터티

  • 약한 엔터티와 강한 엔터티로 나뉘는데 A가 혼자서는 존재하지 못하고 B의 존재 여부에 따라 종속적이면 A는 약한 엔터티고 B는 강한 엔터티이다.

4.1.2 릴레이션

  • 데이터베이스에서 정보를 구분하여 저장하는 기본 단위
  • 엔터티에 관한 데이터를 데이터베이스는 릴레이션 하나에 담아서 관리
  • 릴레이션은 관계형 데이터베이스에서는 '테이블'이라고 하며 NoSQL 데이터베이스에서는 '컬렉션'이라고 한다.

테이블과 컬렉션

  • 크게 관계형 데이터베이스와 NoSQL 데이터베이스로 나눌 수 있다.
  • 대표적인 관계형 데이터베이스인 MySQL과 대표적인 NoSQL 데이터베이스인 MongoDB를 예로 들면, MySQL의 구조는 레코드-테이블-데이터베이스로 이루어져있고 NoSQL 데이터베이스의 구조는 도큐먼트-컬렉션-데이터베이스로 이루어져있다.

4.1.3 속성

  • 릴레이션에서 관리하는 구체적이며 고유한 이름을 갖는 정보
  • ex) '차'라는 엔터티를 뽑으면 차 번호, 바퀴 수, 차 색깔, 차종 등이 속성으로 있다.

4.1.4 도메인

  • 릴레이션에 포함된 각각의 속성들이 가질 수 있는 값의 집합
  • 성별이라는 속성이 있다면 속성이 가질 수 있는 갑승ㄴ {남, 여}라는 집합이다.

4.1.5 필드와 레코드

  • 데이터베이스에서 필드와 레코드로 구성된 테이블을 만들 수 있다.
  • 회원이란 엔터티는 member라는 테이블로 속성인 이름, 아이디를 가지고 name, ID, address 등의 필드를 가진다.

(MySQL 기준)

 

필드타입

  • 필드는 타입을 가지는데 이름은 문자열이고 전화번호는 숫자이다
  • 타입들은 DBMS마다 다르다.

숫자타입

  • 숫자타입으로는 TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT 등이 있다. 

날짜타입

  • DATE, DATETIME, TIMESTAMP 등이 있다.

문자타입

  • CHAR, VARCHAR, TEXT, BLOB, ENUM, SET이 있다.

CHAR와 VARCHAR

  • CHAR, VARCHAR 모두 그 안에 수를 입력해서 몇자까지 입력할지 정하는데 CHAR는 테이블을 생성할 때 선언한 길이로 고정되며 0~255사이의 값을 가진다. 레코드를 저장할 때 무조건 선언한 길이 값으로 고정해서 저장된다.
  • VARCHAR는 가변 길이 문자열이다. 0에서 65535 사이의 값으로 지정할 수 있고 입력된 데이터에 따라 용량을 가변시켜 저장한다. 예를들어 10글자의 이메일을 저장하여도 10글자에 해당하는 바이트 + 길이기록용 1바이트로 저장하게 된다 . VARCHAR(10000)으로 선언했음에도.

TEXT와 BLOB

  • 모두 큰 데이터를 저장할 때 쓰는 타입
  • TEXT는 큰 문자열 저장에 사용
  • BLOB은 이미지, 동영상 등 큰 데이터 저장에 사용
  • 그러나 S3를 이용하는 등 서버에 파일을 올리고 파일에 관한 경로를 VARCHAR로 저장함

ENUM과 SET

  • 모두 문자열을 열거한 타입
  • ENUM은 (x-small, small, medium, large, x-large) 형태로 쓰이고 하나만 선택하는 단일 선택만 가능
  • ENUM 리스트에 없는 잘못된 값을 삽입하면 빈 문자열이 대신 삽입됨
  • ENUM을 이용하면 x-mall 등이 0, 1 등으로 매핑되어 메모리를 적게 사용하는 이점을 가지고 최대 65,535개의 요소 넣을 수 있다.
  • SET은 ENUM과 비슷하지만 여러 개의 데이터를 선택할 수 있고 비트 단위의 연산을 할 수 있으며 최대 64개의 요소를 집어넣을 수 있다는 점이 다르다.
  • ENUM과 SET을 쓸 경우 공간적으로 이점을 볼 수 있지만 애플리케이션 수정에 따라 데이터베이스의 ENUM이나 SET에서 정의한 목록을 수정해야하는 단점이 있다.

 

4.1.6 관계

  • 데이터베이스에 테이블은 하나만 있는 것이 아니다. 여러 개의 테이블이 있고 이러한 테이블은 서로의 관계가 정의되어 있다. 이러한 관계를 관계화살표로 나타낸다.

1:1 관계

  • ex) 유저당 유저 이메일은 한 개씩이므로 1:1 관계

1:N 관계

  • 한 유저당 여러 개의 상품을 장바구니에 넣을 수 있다. 이 경우 1:N 관계
  • 하나도 넣지않은 0개의 경우도 있으니 0도 포함되는 화살표를 통해 표현

N:M 관계

  • 학생과 강의의 관계를 정의하면 학생도 강의를 많이 들을 수 있고 강의도 여러 명의 학생을 포함하므로 N:M이 된다.

 

4.1.7 키

  • 테이블 간의 관계를 조금 더 명확하게 하고 테이블 자체의 인덱스를 위해 설정된 장치로 기본키, 외래키, 후보키, 슈퍼키, 대체키가 있다.

  • 슈퍼키는 유일성이 있고 그 안에 포함된 후보키는 최소성을 갖춘 키이다.
  • 후보키 중에서도 기본키로 선택되지 못한 키가 대체키가 된다.

기본키

  • 기본키(PrimaryKey)는 줄여 PK 또는 프라이머리키라고 불리고 유일성과 최소성을 만족하는 키이다.

자연키

  • 예를들어 유저 테이블을 만든다고 가정하면 주민번호, 이름, 성별 등의 속성이 있다.
  • 이름, 성별 등은 중복된 값이 들어올 수 있으므로 부적절하고 남는 것은 주민등록번호이다.
  • 이런 식으로 중복 값을 제외하며 중복되지 않는 것을 자연스럽게 뽑다가 나오는 키가 자연키이다.

인조키

  • 유저 테이블에서 인위적으로 유저 아이디를 부여하여 고유 식별자가 생기게 한다. 이를 인조키라고 한다.

외래키

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

후보키

  • 후보키는 기본키가 될 수 있는 후보들이며 유일성과 최소성을 동시에 만족해야함

대체키

  • 대체키는 후보키가 두 개 이상일 경우 어느 하나를 기본키로 지정하고 남은 후보키를 뜻함

슈퍼키

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

'CS' 카테고리의 다른 글

4.3 트랜잭션과 무결성  (1) 2022.09.22
4.2 ERD와 정규화 과정  (0) 2022.09.13
CPU 스케줄링 알고리즘  (0) 2022.09.07
프로세스와 스레드(2)  (0) 2022.09.05
3.3 프로세스와 스레드  (0) 2022.09.04