일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- useMemo
- 리액트 코드분할
- rendering
- 자동 배칭
- TS
- 타스
- Next.js
- 자바스크립트
- react code splitting
- React
- lifting state up
- 상태 끌어올리기
- state 최적화
- 프론트엔드
- react router dom v6
- 렌더링 동작원리
- Front-End
- router dom
- 리액트
- 렌더링
- useCallback
- NextJS
- 배칭
- Interface
- mapped types
- JavaScript
- 고급타입
- react rendering
- 타입스크립트
- TypeScript
- Today
- Total
서녕이네 개발단지
면접을 위한 CS 전공지식 노트 [CHAPTER 4] (1) 본문
[CHAPTER 4]. 데이터베이스
[SECTION 4.1] - 데이터베이스의 기본
- 데이터베이스는 일정한 규칙, 혹은 규약을 통해 구조화되어 저장되는 데이터의 모음이다.
- 해당 데이터베이스를 제어, 관리하는 통합 시스템을 DBMS(DataBase Management System)라고 하며, 데이터베이스 안에 있는 데이터들을 특정 DBMS마다 정의된 쿼리 언어를 통해 삽입, 삭제, 수정, 조회 등을 수행할 수 있다.
❗️또한, 데이터베이스는 실시간 접근과 동시 공유가 가능하다.
☝🏻위의 그림처럼 데이터베이스 위에 DBMS가 있고 그 위에 응용 프로그램이 있으며, 이러한 구조를 기반으로 데이터를 주고받는다.
4.1.1 엔터티
엔터티(entity)란?
- 사람, 장소, 물건, 사건, 개념 등 여러 개의 속성을 지닌 명사를 의미한다.
- 물론 이보다 많은 속성이 있지만 서비스의 요구 사항에 맞춰 속성이 정해진다.
약한 엔터티와 강한 엔터티
- 엔터티는 약한 엔터티와 강한 엔터티로 나뉜다.
예를 들어~
A가 혼자서는 존재하지 못하고 B의 존재 여부에 따라 중속적이라면 A는 약한 엔터티이고 B는 강한 엔터티가 된다.
4.1.2 릴레이션
릴레이션(relation)이란?
- 데이터베이스에서 정보를 구분하여 저장하는 기본 단위이다.
- 엔터티에 관한 데이터를 데이터베이스는 릴레이션 하나에 담아서 관리한다.
☝🏻 위 그림처럼 회원이라는 엔터티가 데이터베이스에서 관리될 때 릴레이션으로 변화된 것을 볼 수 있다.
- 릴레이션은 관계형 데이터베이스에서는 '테이블'이라고 하며, NoSQL 데이터베이스에서는 '컬렉션'이라고 한다.
테이블과 컬렉션
- 데이터베이스의 종류는 크게 관계형 데이터베이스와 NoSQL 데이터베이스로 나눌 수 있다.
- 이 중 대표적인 관계형 데이터베이스인 MySQL과 대표적인 NoSQL 데이터베이스인 MongoDB를 예로 들면?
👉🏻MySQL의 구조는 레코드-테이블-데이터베이스로 이루어져 있고 MongoDB 데이터베이스의 구조는 도큐먼트-컬렉션-데이터베이스로 이루어져 있다.
☝🏻위 그림처럼 레코드가 쌓여서 테이블이 되고 테이블이 쌓여서 데이터베이스가 되는 것이다.
4.1.3 속성
속성(attribute)이란?
- 릴레이션에서 관리하는 구체적이며 고유한 이름을 갖는 정보이다.
ex)
1. '차'라는 엔터티의 속성을 뽑아보자.
2. 차 넘버, 바퀴 수, 차 색깔, 차종 등이 있다.
3. 👉🏻 이 중에서 서비스의 요구 사항을 기반으로 관리해야 할 필요가 있는 속성들만 엔터티의 속성이 된다.
4.1.4 도메인
도메인(domain)이란?
- 릴레이션에 포함된 각각의 속성들이 가질 수 있는 값의 집합을 말한다.
예를 들어~
성별이라는 속성이 있다면 이 속성이 가질 수 있는 값은(남, 여)라는 집합이 된다.
4.1.5 필드와 레코드
- 앞에서 설명한 것들을 기반으로 데이터베이스에서 필드와 레코드로 구성된 테이블을 만들 수 있다.
- 회원이란 엔터티는 member라는 테이블로 속성인 이름, 아이디 등을 가직 있으며 name, ID, address 등의 필드를 가진다.
- 그리고 이 테이블에 쌓이는 행(row) 단위의 데이터를 레코드라고 한다. 또한, 레코드를 튜플이라고도 한다.
필드 타입
- 필드는 타입을 갖는다.
예를 들어 ~
- 이름은 문자열이고 전화번호는 숫자다.
- 이러한 타입들은 DBMS마다 다르며 이 책에서는 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(30)이라면 최대 30글자까지 입력할 수 있다.
- CHAR : 고정 길이 문자열이며 길이는 0에서 255 사이의 값을 가진다. 레코드를 저장할 때 무조건 선언한 길이 값으로 '고정'해서 저장된다.
- VARCHAR : 가변 길이 문자열이다. 길이는 0에서 65.535 사이의 값으로 지정할 수 있으며, 입력된 데이터에 따라 용량을 가변 시켜 저장한다.
💡 그렇게 때문에 CHAR의 경우 유동적이지 않은 길이를 가진 데이터의 경우에 효율적이며, 유동적인 길이를 가진 데이터는 VARCHAR로 저장하는 것이 좋다.
TEXT와 BLOB
- 두 개의 타입 모두 큰 데이터를 저장할 때 쓰는 타입이다.
- TEXT : 큰 문자열 저장에 쓰며 주로 게시판의 본문을 저장할 때 쓴다.
- BLOB : 이미지, 동영상 등 큰 데이터 저장에 쓴다. 그러나 보통은 아마존의 이미지 호스팅 서비스인 S3를 이용하는 등 서버에 파일을 올리고 파일에 관한 경로를 VARCHAR로 저장한다.
ENUM과 SET
- ENUM과 SET 모두 문자열을 열거한 타입이다.
- ENUM : ENUM('x-small' , 'small' , 'medium' , 'large' , 'x-large') 형태로 쓰이며, 이 중에서 하나만 선택하는 단일 선택만 가능하고 ENUM 리스트에 없는 잘못된 값을 삽입하면 빈 문자열이 대신 삽입된다.
- SET : ENUM과 비슷하지만 여러 개의 데이터를 선택할 수 있고 비트 단위의 연산을 할 수 있으며 최대 64개의 요소를 집어넣을 수 있다는 점이 다르다.
4.1.6 관계
- 데이터베이스에 테이블은 하나만 있는 것이 아니다.
- 여러 개의 테이블이 있고 이러한 테이블은 서로의 관계가 정의되어 있다. 이러한 관계를 관계화살표로 나타낸다.
1:1 관계
- 1:1 관계는 테이블을 두 개의 테이블로 나눠 테이블의 구조를 더 이해하기 쉽게 만들어 준다.
1:N 관계
- 한 개체가 다른 많은 개체를 포함하는 관계를 말한다.
N:M 관계
- 학생과 강의의 관계를 정의하면 어떻게 될까?
- 학생도 강의를 많이 들을 수 있고 강의도 여러 명의 학생을 포함할 수 있다. 이 경우 N:M이 된다.
4.1.7 키
- 테이블 간의 관계를 조금 더 명확하게 하고 테이블 자체의 인덱스를 위해 설정된 장치로 기본키, 외래키, 후보키, 슈퍼키, 대체키가 있다.
- 키들은 앞의 그림과 같은 관계를 가진다.
- 슈퍼키는 유일성이 있고 그 안에 포함된 후보키는 최소성까지 갖춘 키이다.
- 후보키 중에서 기본키르 선택되지 못한 키는 대체키가 된다.
- 유일성은 중복되는 값은 없으며, 최소성은 필드를 조합하지 않고 최소 필드만 써서 키를 형성할 수 있는 것을 말한다.
기본키(Primary Key)
기본키란?
- 줄여 PK 또는 프라이머리키라고 많이 부르며, 유일성과 최소성을 만족하는 키이다.
❗️이는 테이블의 데이터 중 고유하게 존재하는 속성이며 기본키에 해당하는 데이터는 앞의 그림의 ID처럼 중복되어서는 안 된다.
PDT-0002가 중복되기 때문에 ID라는 필드는 기본키가 되지 말아야 한다.
☝🏻위의 그림에서 ID는 기본키로 설정할 수 있다. 물론! {ID,name}이라는 복합키를 기본키로 설정할 수 있지만 그렇게 되면 최소성을 만족하지 않다.
👉🏻기본키는 자연키 또는 인조키 중에 골라 설정한다.
자연키
- 중복된 값들을 제외하며 중복되지 않는 것을 '자연스레' 뽑다가 나오는 키를 자연키라고 한다.
- 자연키는 언젠가는 변하는 속성을 가진다.
인조키
- 인위적으로 생성한 키를 인조키라고 한다.
- 자연키와는 대조적으로 변하지 않는다.
- 따라서 보통 기본키는 인조키로 설정한다.
외래키(Foreign Key)
외래키란?
- FK라고도 하며, 다른 테이블의 기본키를 그대로 참조하는 값으로 개체와의 관계를 식별하는 데 사용한다.
👉🏻 외래키는 중복되어도 괜찮다.
후보키(candidate key)
- 기본키가 될 수 있는 후보들이며 유일성과 최소성을 동시에 만족하는 키이다.
대체키(alternate key)
- 후보키가 두 개 이상일 경우 어느 하나를 기본키로 지정하고 남은 후보키들을 말한다.
슈퍼키(super key)
- 각 레코드를 유일하게 식별할 수 있는 유일성을 갖춘 키이다.
'도서' 카테고리의 다른 글
면접을 위한 CS 전공지식 노트 [CHAPTER 5] (1) (0) | 2023.07.01 |
---|---|
면접을 위한 CS 전공지식 노트 [CHAPTER 4] (2) (0) | 2023.06.25 |
면접을 위한 CS 전공지식 노트 [CHAPTER 3] (4) (0) | 2023.06.24 |
면접을 위한 CS 전공지식 노트 [CHAPTER 3] (3) (0) | 2023.06.24 |
면접을 위한 CS 전공지식 노트 [CHAPTER 3] (1) (0) | 2023.06.20 |