참고한 책: 면접을 위한 CS 전공지식 노트 (http://www.yes24.com/Product/Goods/108887922)
4. 데이터베이스
4.1. 데이터베이스의 기본
4.1.1. 엔터티
4.1.2. 릴레이션
4.1.3. 속성
4.1.4. 도메인
4.1.5. 필드와 레코드
4.1.6. 관계
4.1.7. 키
p. 184
4.1 데이터베이스의 기본
데이터베이스(DB, DataBase)
일정한 규칙, 혹은 규약을 통해 구조화되어 저장되는 데이터의 모음
DBMS(DataBase Management System)
데이터베이스를 제어, 관리하는 통합 시스템
데이터베이스를 저장, 관리하기 위해 설계된 소프트웨어 패키지
DBMS마다 정의된 쿼리 언어를 통해 데이터의 삽입, 삭제, 수정, 조회 등을 수행할 수 있다.
응용 프로그램 |
DBMS |
데이터베이스 |
4.1.1 엔터티(Entity)
사람, 장소, 물건, 사건, 개념 등 여러 개의 속성을 지닌 명사.
엔터티는 DB에서 속성들의 잡합으로 표현된다.
Entity Set
비슷한 엔터티들의 집합. 예) 모든 직원들
서비스의 요구 사항에 맞춰 속성이 정해짐.
Entity set의 모든 엔터티들은 같은 속성들의 집합을 가진다.
각 entity set은 entity identifier(key)를 가진다.
각 속성은 domain을 가진다.(domain: 속성이 가지는 값의 영역. 'name'이라는 속성이 있다면 'name'의 domain은 문자)
약한 엔터티와 강한 엔터티
엔터티는 약한 엔터티와 강한 엔터티로 나뉨.
A가 독립적으로 존재하지 못하고 B의 존재 여부에 따라 종속적이라면 A는 약한 엔터티, B는 강한 엔터티.
B를 삭제한다면 A도 삭제된다.
p. 185
4.1.2 릴레이션(relation)
데이터베이스에서 정보를 구분하여 저장하는 기본 단위.
엔터티에 관한 데이터를 릴레이션 하나에 담아 관리.
관계형 데이터베이스에서는 '테이블'이라 부르고 NoSQL 데이터베이스에서는 '컬렉션'이라고 함.
테이블과 컬렉션
데이터베이스의 종류는 크게 관계형 데이터베이스와 NoSQL 데이터 베이스로 나눌 수 있음.
관계형 데이터베이스 예: MySQL
NoSQL 데이터베이스 예: MongoDB
이름 | 전화번호 |
인용 | 114 |
홍철 | 112 |
가영 | 119 |
MySQL | MongoDB | |
각 행(파란색 행 제외) | 레코드 | 도큐먼트 |
표(파란색 행 포함) | 테이블 | 컬렉션 |
표가 모인 것 | 데이터베이스 | 데이터베이스 |
p. 187
4.1.3 속성(attribute)
릴레이션에서 관리하는 구체적이며 고유한 이름을 갖는 정보.
'회원'이라는 엔터티의 속성을 뽑아보면 이름, 아이디, 주소, 전화번호 등이 있음.
서비스의 요구 사항을 기반으로 관리해야 할 필요가 있는 속성들만 엔터티의 속성이 됨.
4.1.4 도메인(domain)
릴레이션에 포함된 각각의 속성들이 가질 수 있는 값.
성별이라는 속성이 가질 수 있는 값은 {남, 여} 라는 집합.
p. 188
4.1.5 필드와 레코드
'회원'이라는 엔터티. member 테이블
name | ID | address | phonenumber |
큰돌 | kundol | 서울 | 112 |
가영 | kay | 대전 | 114 |
빅뱅 | big | 카이루 | 119 |
... | ... | ... | ... |
필드: 1행의 각 칸
레코드(튜플): 1행 제외 나머지 각 행
필드타입
필드는 값을 갖는다.
숫자 타입
TYNYINT, SMALLINT, MEDIUMINT, INT, BIGINT 등
타입 | 용량(바이트) | 최솟값(부호 있음) | 최솟값(부호 없음) | 최댓값(부호 없음) | 최댓값(부호 있음) |
TINYINT | 1 | -128 | 0 | 127 | 255 |
SMALLINT | 2 | -32768 | 0 | 32767 | 65535 |
MEDIUMINT | 3 | -8388608 | 0 | 8388607 | 16777215 |
INT | 4 | -2147483648 | 0 | 2147483647 | 4294967295 |
BIGINT | 8 | -263 | 0 | 263-1 | 264-1 |
날짜 타입
DATE, DATETIME, TIMESTAMP
DATE
날짜 부분은 있지만 시간 부분은 없는 값. 3바이트
1000-01-01 ~ 9999-12-31
DATEIME
날짜+시간. 8바이트
1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
문자 타입
CHAR, VARCHAR, TEXT, BLOB ENUM, SET
CHAR, VARCHAR
CHAR | VARCHAR | |
공통점 | 타입 옆에 괄호를 열고 수를 입력해서 몇자까지 입력할지 정함 예: CHAR(30) 이라면 최대 30글자까지 입력 가능 |
|
차이점 | -고정 길이 문자열 -길이는 0에서 255사이의 값 -레코드 저장시 무조건 선언한 길이 값으로 저장됨 예)CHAR(30)로 선언하면 5글자 저장해도 30바이트로 저장됨 -유동적이지 않은 길이를 가진 데이터에 효율적 |
-가변 길이 문자열 -길이는 0에서 65535 사이의 값 -입력된 데이터에 따라 용량을 가변시켜 저장 예) VARCHAR(1000)으로 선언했을 때 10 글자를 저장하면 10(글자 수)+1(길이 기록용) 바이트 저장 -유동적인 길이를 가진 데이터 |
TEXT
큰 문자열 저장에 쓰며 주로 게시판의 본문을 저장할 때 씀
BLOB
이미지, 동영상 등 큰 데이터 저장에 씀.
보통 서버에 파일을 올리고 파일에 관한 경로를 VARCHAR로 저장.
ENUM
문자열 열거 타입
ENUM('x-small', 'small', 'medium', 'large', 'x-large')형태로 쓰임.
하나만 선택하는 단일 선택만 가능하고 리스트에 없는 잘못된 값을 삽입하면 빈 문자열이 대신 사용됨.
문자열이 숫자로 매핑되어 메모리를 적게 사용함.
최대 65535개의 요소들을 넣을 수 있음.
SET
ENUM과 비슷하지만 여러개의 데이터를 선택할 수 있음.
비트 단위 연산 할 수 있음.
최대 64개의 요소를 집어넣을 수 있음.
ENU과 SET을 쓰면 공간적으로 이점을 볼 수 있지만 애플리케이션 수정에 따라 데이터베이스의 ENUM이나 SET에서 저의한 목록을 수정해야함.
p. 193
4.1.6 관계
여러 개의 테이블이 있고 이러한 테이블은 서로 관계가 정의되어 있음.
관계는 관계화살표로 나타냄.
1:1 관계
예) 유저당 유저이메일
1:N 관계
예) 유저당 장바구니에 넣은 상품
(유저가 장바구니에 아무런 상품도 넣지 않는 경우가 있다.)
N:M 관계
예) 학생과 강의의 관계.
학생은 여러 강의를 들을 수 있고, 강의를 듣는 학생이 여러 명일 수 있다.
1:N, 1:M 관계를 갖는 테이블 두 개로 마눠서 설정
p. 195
4.1.7 키
테이블 간의 관계를 조금 더 명확하게 하고 테이블 자체의 인덱스를 위해 설정된 장치
기본키, 외래키, 후보키, 슈퍼키, 대체키가 있음.
슈퍼키 > 후보키 > 기본키, 대체키
슈퍼키: 유일성
후보키: 유일성+최소성
대체키: 기본키로 선택되지 못한 키
유일성
중복되는 값이 없는 것
최소성
필드를 조합하지 않고 최소 필드만 써서 키를 형성할 수 있는 것.
기본키(Primary Key, PK)
프라이머리키라고 많이 부름.
유일성과 최소성을 만족.
기본키에 해당하는 데이터는 중복되는 값이 있으면 안됨.
name이라는 속성에 '길동'이라는 값을 가진 레코드가 2개 이상이면 name은 기본키가 될수 없다.
기본키는 자연키 또는 인조키 중에 골라 설정함.
자연키
중복되는 값들을 제외하며 중복되지 않는 것을 '자연스레' 뽑다가 나오는 키
자연키는 언젠가는 변하는 속성을 가짐.
->비즈니스 모델에서 추출한 자연키는 비즈니스 규칙에 의해 값 혹은 그 의미가 변할 여지가 다분하다.
예를 들어 주민등록번호의 경우, 보안정책으로 데이터베이스에 영구히 저장할 수 없다.
주민등록번호가 사람마다 가지는 고유한 값인 것은 맞지만 규칙 때문에 쓰지 못하게 된다.
(출처: https://multifrontgarden.tistory.com/180 )
인조키
테이블을 생성할 때 원래의 여러 속성들이 있는데 여기에 인위적으로 고유 식별자를 만들어 생성한 키.
자연키와는 달리 변하지 않음. 보통 기본키는 인조키로 설정함.
외래키(Foreign Key, FK)
다른 테이블의 기본키를 그대로 참조하는 값으로 개체와의 관계를 식별하는 데 사용
중복 가능.
후보키(candidate key)
기본키가 될 수 있는 후보들.
유일성과 최소성을 동시에 만족하는 키.
대체키(alternate key)
후보키가 두 개 이상일 경우 어느 하나를 기본키로 지정하고 남은 후보키들
슈퍼키(super key)
각 레코드를 유일하세 식별할 수 있는 유일성을 갖춘 키
'CS 스터디' 카테고리의 다른 글
4.3 트랜잭션과 무결성 (0) | 2023.06.21 |
---|---|
4.2 ERD와 정규화 과정 (0) | 2023.06.16 |
3.4 CPU 스케줄링 알고리즘 (0) | 2023.06.14 |
3.3 프로세스와 스레드 (1) | 2023.06.12 |
3.2 메모리 (2) | 2023.06.10 |