개인 공부😊/Database

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

송테이토 2022. 11. 27. 21:04

데이터베이스란?

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

데이터베이스 안에 있는 데이터들은 특정 DBMS마다 정의된 쿼리 언어를 통해 삽입, 삭제, 수정, 조회 등을 수행할 수 있다.

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

DBMS

→ 해당 데이터베이스를 제어, 관리하는 통합시스템을 DBMS라고 한다.

엔터티

→ 엔터티는 사람, 장소, 물건, 사건, 개념 등 여러 개의 속성을 지닌 명사를 의미

언테터티는 약한 엔터티와 강한 엔터티로 나뉜다.

예를 들어 A가 혼자서 존재하지 못하고 B의 존재 여부에 따라 종속적이라면

A : 약한 엔터티

B : 강한 엔터티

예) 방은 건물 안에만 존재함

방 : 약한 엔터티

건물 : 강한 엔터티

릴레이션

→ 릴레이션은 데이터베이스에서 정보를 구분하여 저장하는 기본 단위

엔터티에 관한 데이터를 데이터베이스는 릴레이션 하나에 담아서 관리

관계형 데이터베이스에서는 ”테이블”

NoSQL 데이터베이스에서는 “컬렉션”

테이블과 컬렉션

데이터베이스의 종류는 크게 관계형 데이터베이스와 NoSQL 데이터베이스로 나눌 수 있다.

관계형 데이터베이스(MySQL)

→ 레코드 - 테이블 -데이터베이스

—레코드가 쌓여서 테이블이 되고 테이블이 쌓여서 데이터베이스가 되는 것!

NoSQL 데이터베이스(MongoDB)

→ 도큐먼트 - 컬렉션 - 데이터베이스

속성(attribute)

→릴레이션에서 관리하는 구체적이며 고유한 이름을 갖는 정보

예) ‘차’ 라는 엔터티의 속성

차 넘버, 바퀴 수, 차 색깔, 차종 등….

이 중에서 서비스의 요구 사항을 기반으로 관리해야 할 필요가 있는 속성들만 엔터티의 속성이 된다.

도메인

→ 릴레이션에 포함된 각각의 속성들이 가질 수 있는 값의 집합을 말한다.

예) “성별” 이라는 속성

이 속성이 가질 수 있는 값 : {남, 여} 라는 도메인을 가진다.

필드와 레코드

필드

레코드

필드 타입

MySQL

Oracle

문자형 데이터타입

데이터 유형 정의

CHAR(n) 고정 길이 데이터 타입(최대 255byte)- 지정된 길이보다 짦은 데이터 입력될 시 나머지 공간 공백으로 채워진다.
VARCHAR(n) 가변 길이 데이터 타입(최대 65535byte)- 지정된 길이보다 짦은 데이터 입력될 시 나머지 공간은 채우지 않는다.
TINYTEXT(n) 문자열 데이터 타입(최대 255byte)
TEXT(n) 문자열 데이터 타입(최대 65535byte)
MEDIUMTEXT(n) 문자열 데이터 타입(최대 16777215byte)
LONGTEXT(n) 문자열 데이터 타입(최대 4294967295byte)
JSON JSON 문자열 데이터 타입 - JSON 형태의 포맷을 꼭 준수해야 한다.

데이터타입 설명

CHAR(n) 고정길이 문자 / 최대 2000byte / 디폴트 값은 1byte
VARCHAR2(n) 가변길이 문자 / 최대 4000BYTE / 디폴트 값은 1byte
NCHAR(n) 고정길이 유니코드 문자(다국어 입력가능) / 최대 2000byte / 디폴트 값은 1byte
NVARCHAR(n) 가변길이 유니코드 문자(다국어 입력가능) / 최대 2000byte / 디폴트 값은 1byte
LONG 최대 2GB 크기의 가변길이 문자형
CLOB 대용량 텍스트 데이터 타입(최대 4Gbyte)
NCLOB 대용량 텍스트 유니코드 데이터 타입(최대 4Gbyte)

숫자형 데이터 타입

데이터 유형 정의

TINYINT(n) 정수형 데이터 타입(1byte) -128 ~ +127 또는 0 ~ 255수 표현할 수 있다.
SMALLINT(n) 정수형 데이터 타입(2byte) -32768 ~ 32767 또는 0 ~ 65536수 표현할 수 있다.
MEDIUMINT(n) 정수형 데이터 타입(3byte) -8388608 ~ +8388607 또는 0 ~ 16777215수 표현할 수 있다.
INT(n) 정수형 데이터 타입(4byte) -2147483648 ~ +2147483647 또는 0 ~ 4294967295수 표현할 수 있다.
BIGINT(n) 정수형 데이터 타입(8byte) - 무제한 수 표현할 수 있다.
FLOAT(길이, 소수) 부동 소수형 데이터 타입(4byte) -고정 소수점을 사용 형태이다.
DECIMAL(길이, 소수) 고정 소수형 데이터 타입고정(길이+1byte) -소수점을 사용 형태이다.
DOUBLE(길이, 소수) 부동 소수형 데이터 타입(8byte) -DOUBLE을 문자열로 저장한다.

데이터 타입 설명

NUMBER(P,S) 가변숫자 / P (1 ~ 38, 디폴트 : 38) / S (-84 ~ 127, 디폴트 값 : 0)  / 최대 22byte
FLOAT(P) NUMBER의 하위타입 / P (1~128 .디폴트 : 128) / 이진수 기준 / 최대 22byte
BINARY_FLOAT 32비트 부동소수점 수 / 최대 4byte
BINARY_DOUBLE 64비트 부동소수점 수 / 최대 8byte

숫자 타입은 4가지 타입이 있습니다. 대부분 NUMBER형을 사용합니다. P는 소수점을 포함한 전체 자릿수를 의미하고, S는 소수점 자릿수를 의미합니다. NUMBER는, 가변숫자이므로 P와S를 입력하지 않으면 저장 데이터의 크게에 맞게 자동으로 조절됩니다.

날짜형 데이터 타입

데이터 유형 정의
DATE 날짜(년도, 월, 일) 형태의 기간 표현 데이터 타입(3byte)
TIME 시간(시, 분, 초) 형태의 기간 표현 데이터 타입(3byte)
DATETIME 날짜와 시간 형태의 기간 표현 데이터 타입(8byte)
TIMESTAMP 날짜와 시간 형태의 기간 표현 데이터 타입(4byte) -시스템 변경 시 자동으로 그 날짜와 시간이 저장된다.
YEAR 년도 표현 데이터 타입(1byte)

데이터타입 설명

DATE BC 4712년 1월 1일부터 9999년 12월 31일, 연, 월, 일, 시, 분, 초 까지 입력 가능
TIMESTAMP 연도, 월, 일, 시, 분, 초 + 밀리초까지 입력가능

이진 데이터 타입 #

LOB 데이터 타입

데이터 유형 정의
BINARY(n) & BYTE(n) CHAR의 형태의 이진 데이터 타입 (최대 255byte)
VARBINARY(n) VARCHAR의 형태의 이진 데이터 타입 (최대 65535byte)
TINYBLOB(n) 이진 데이터 타입 (최대 255byte)
BLOB(n) 이진 데이터 타입 (최대 65535byte)
MEDIUMBLOB(n) 이진 데이터 타입 (최대 16777215byte)
LONGBLOB(n) 이진 데이터 타입 (최대 4294967295byte)

데이터 타입 설명

CLOB 문자형 대용량 객체 고정길이와 가변길이 문자집합 지원
NCLOB 유니코드를 지원하는 문자형 대용량 객체
BLOB 이진형 대용량 객체
BFILE 대용량 이진 파일에 대한 위치,이름 저장

LOB이란 Large Object의 약자로 대용량 데이터를 저장할 수 있는 데이터 타입입니다. 일반적으로 그래픽, 이미지, 사운드등 비정형 데이터를 저장할때 LOB타입을 사용합니다.

문자형 대용량 데이터는 CLOB나 NCLOB,

그래픽, 이미지, 동영상등의 대이터는 BLOB를 주로 사용합니다.

TEXT와 BLOB

두 개 모두 큰 데이터를 저장할 때 씀

TEXT → 큰 문자열 저장에 쓰며 주로 게시판 본문

BLOB → 이미지, 동영상 큰 데이터 저장에 쓴다.

(보통은 아마존의 이미지 호스팅 서비스인 s3를 사용하는 등 서버에 파일을 올리고 파일에 관한 경로를 VARCAHR로 저장)

ENUM 과 SET

→ 모두 문자열을 열거한 타입

ENUM : 단일 선택

리스트에 없는 값을 삽입하면 빈문자열 삽입

최대 65,535개의 요소들을 넣을 수 있다.

칼럼에 정의된 값들은 다른 테이블에서 재사용할 수 없다.

SET : 복수 선택

비트 단위의 연산 가능

최대 64개의 요소를 집어넣는다.

fk와 화살표

화살표 방향 요게 굉장히 헷갈린다. 일단 기억하기 쉽게 설명하자면 화살표는 fk에서 나온다고 보면 된다. 참조되는 테이블은 화살표를 받는다. 예를 들어 products tblae이 nutritions table을 참조한다면, 화살표를

참조 된다(id) <---- 참조 한다(nutritions_id)

로 보면 쉽다. 괄호 안의 내용은 column값이다.

  • 기본키
  • 외래키
  • 후보키
  • 슈퍼키
  • 대체키

슈퍼키 (유일성)

후보키(최소성)

기본키 대체키

  • 기본키- PK 또는 프라이머리키

→ 유일성과 최소성을 만족하는 키

중복 안된다!

  • 자연키

중복된 값들을 제외하며 중복되지 않는 것을 ‘자연스레’ 뽑다가 나오는 키

→ 자연키는 언젠가 변하는 속성을 가진다.

예 ) 유저테이블 - 주민등록번호, 이름 , 성별

이름과 성별은 중복이 되니 제외되고, 주번은 남아버렸다.

  • 인조키

인위적으로 숫자를 부여하는 것

오라클 : 시퀀스

MySQL : auto increment

→ 자연키와 달리 변하지 않는다.

그래서 주로 기본키는 인조키로 설정한다.

  • 외래키 - FK

→ 다른 테이블의 기본키를 그대로 참조하는 값으로 개체와의 관계를 식별하는데 사용

외래키는 중복되어도 괜찮다.

  • 후보키

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

  • 대체키

후보키가 두 개 이상일 경우 어느 하나를 기본키로 지정하고 남은 후보키들

  • 슈퍼키

각 레코드를 유일하게 식별할 수 있는 유일성을 갖춘 키