1. 데이터베이스 개념
데이터베이스(DB, DataBase)는 일정한 규칙, 혹은 규약을 통해 구조화되어 저장되는 데이터의 모음
DBMS(Database Management System): 데이터베이스를 관리하는 소프트웨어
- 종류: MySQL, Oracle, Microsoft SQL Server, PostgreSQL
데이터베이스 안에 있는 데이터들은 특정 DBMS마다 정의된 쿼리 언어(query language)를 통해 삽입, 삭제, 수정, 조회 등을 수행할 수 있습니다. 또한, 데이터베이스는 실시간 접근과 동시 공유가 가능합니다.
위 그림과 같은 구조를 기반으로 데이터를 주고 받습니다.
Ex) MySQL(DBMS)가 있고 그 위에 응용 프로그램에 속하는 Node.js나 php에서 해당 데이터베이스 안에 있는 데이터를 그집어내 해당 데이터 관련 로직을 구축할 수 있습니다.
2. 엔터티(Entity)
엔터티는 현실 세계에서 독립적으로 존재하며 고유하게 식별 가능한 객체나 개체를 의미합니다. 예를 들어, 학생, 책, 주문 등이 엔터티가 될 수 있습니다.
- 강한 Entity: 고유하게 식별할 수 있는 기본 키를 갖고 있으며 독립적으로 존재할 수 있는 entity
Ex) 학생 entity는 학번을 기본 키로 가지며 다른 entity에 의존하지 않고 독립적으로 존재할 수 있습니다. - 약한 Entity: 고유하게 식별할 수 있는 기본 키(Primary key)가 없고 다른 entity에 의존하여 식별하는 entity
Ex1) 주문 항목 entity는 주문 entity에 의존하여 식별됩니다. 주문번호와 항목번호를 합쳐서 고유하게 식별될 수 있습니다.
Ex2) 직원의 자녀 entity는 직원 entity에 의존하여 식별됩니다. 직원ID와 자녀의 이름을 합쳐서 고유하게 식별될 수 있습니다.
2. 속성(Attribute)
엔터티는 속성(Attribute)를 가집니다. 속성은 Entity의 특성이나 성질을 나타냅니다.
Ex) 학생이라는 Entity가 있을 때, 이름, 학번, 생년월일, 전공 등을 속성으로 가질 수 있습니다.
3. 도메인(Domain)
Domain은 속성이 가질 수 있는 값의 집합을 의미합니다.
Ex) 성별 속성이 있을 때, 이 속성이 가질 수 있는 값은 {남, 여} 집합이 됩니다.
4. 릴레이션(Relation)
Relation은 데이터베이스에서 정보를 구분하여 저장하는 기본 단위입니다. 쉽게 말해, 데이터를 표 형태로 표현한 것입니다. Entity에 관한 데이터를 데이터베이스는 relation 하나에 담아서 관리합니다.
Ex) 학생이라는 entity가 데이터베이스에서 관리할 때 아래와 같이 relation(표 형태)로 관리됩니다.
학번 | 이름 | 나이 | 전공 |
1 | 홍길동 | 20 | 컴퓨터공학과 |
2 | 임꺽정 | 21 | 산업경영공학과 |
관계형 데이터베이스에서는 'table', NoSQL 데이터베이스에서는 'collection'이라고 합니다.
- 관계형 데이터베이스: 데이터를 테이블 형태로 저장하고 관리
- 구조: record-table-database - NoSQL 데이터베이스: 비관계형 데이터베이스
- 구조: document-collection-database
위 그림과 같이 record가 쌓여서 table이 되고 table이 쌓여서 database가 됩니다.
5. Field & Record
6. Field Type
필드는 타입을 갖습니다.
Ex) 이름 -> 문자열, 전화번호 -> 숫자
숫자 타입
타입 | 용량(byte) | 최솟값(부호O) | 최댓값(부호O) | 최솟값(부호X) | 최댓값(부호X) |
TINYINT | 1(=8bit) | -128 | 127 | 0 | 255 |
SMALLINT | 2 | -32768 | 32767 | 0 | 65535 |
MEDIUMINT | 3 | -8388608 | 8388607 | 0 | 16777215 |
INT | 4 | -2147483648 | 2147483647 | 0 | 4294967295 |
BIGINT | 8 | -263 | 263-1 | 0 | 264-1 |
부호가 있는 정수: 양수 또는 음수
부호가 없는 정수: 0 또는 양수
날짜 타입
타입 | 용량(byte) | 지원 범위 |
DATE | 3 | 1000-01-01 ~ 9999-12-31 |
DATETIME | 8 | 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 |
TIMESTAMP | 4 | 1970-01-01 00:00:01 ~ 2038-01-19 03:14:07 |
문자 타입
타입 | 특징 | 길이 |
CHAR | 고정 길이 문자열(짧든 길든 선언한 길이 값으로 고정해서 저장) | 0 ~ 255 |
VARCHAR | 가변 길이 문자열(입력된 데이터에 따라 용량을 가변시켜 저장) | 0 ~ 6535 |
TEXT | 큰 문자열 저장(ex. 게시판의 본문 저장) | |
BLOB | 이미지, 동영상 등 큰 데이터 저장 | |
ENUM | 미리 정의된 값 중 하나만 저장 가능 | 최대 65535개 요소 넣을 수 있음 |
SET | 미리 정의된 값 중 여러 개 저장 가능 | 최대 64개 요소 넣을 수 있음 |
7. Relationship(관계)
데이터베이스에 있는 여러 개의 테이블은 서로 관계가 정의되어 있습니다. 관계를 화살표로 표현하는데 이를 관계화살표라고 합니다.
1:1 관계
유저 - 유저 이메일
1:N 관계
유저(1)-장바구니 내 상품(N)
N:M 관계
학생(N)-강의(M)
8. 키(Key)
<학생 테이블>
학번 | 이름 | 주민등록번호 | 학과 | 강의 |
2019000000 | A | 1234 | 컴퓨터공학과 | 웹프로그래밍 |
2019100001 | B | 1523 | 컴퓨터공학과 | 네트워크 기초 |
2019200002 | C | 4567 | 컴퓨터공학과 | 운영체제 |
2019300003 | D | 2647 | 컴퓨터공학과 | 웹프로그래밍 |
2019400004 | E | 1756 | 산업경영공학과 | 운영체제 |
2019500005 | F | 9842 | 산업경영공학과 | 웹프로그래밍 |
2019600006 | G | 3695 | 산업경영공학과 | 기술경영 |
<강의 테이블>
강의명 | 교수 | 교수ID |
웹프로그래밍 | 김OO | 1 |
네트워크 기초 | 박OO | 2 |
운영체제 | 이OO | 3 |
기술경영 | 김OO | 1 |
기본키(Primary Key, PK)
: 유일성과 최소성을 가지며 각 행(record)을 유일하게 식별할 수 있는 칼럼(또는 칼럼 조합)
- 중복된 값을 가질 수 없습니다.
- NULL값을 허용하지 않습니다.
- 유일성: 어떤 키의 값이 데이터베이스 내의 모든 행에 대해 유일해야 한다는 원칙
- 최소성: 키를 구성하는 데 필요한 속성의 수를 최소화해야 한다는 원칙
Ex) 학생 테이블 -> 학번 or 주민등록번호 / 강의 테이블 -> 강의명
자연키 : 테이블의 데이터가 자연스럽게 가지고 있는 키를 이용해 만들어진 키(데이터 자체에서 파생되는 키)
Ex) 학생 테이블 -> 학번, 주민등록번호 / 강의 테이블 -> 강의명
인조키: 인위적으로 생성한 키
Ex) 강의 테이블 -> 강의ID를 부여하는 경우, 강의ID가 인조키
외래키(Foreign Key, FK)
: 다른 테이블의 기본키를 참조하는 값
- 두 테이블 간의 관계를 설정하는데 사용
Ex) 학생 테이블(강의) - 강의 테이블(강의명) -> '학생 테이블'의 '강의'는 외래키이며 '강의 테이블'의 기본키를 참조
후보키(Candidate Key)
: 테이블에서 기본키로 사용될 수 있는 후보가 되는 키
- 유일성과 최소성을 동시에 만족합니다.
Ex) 학생 테이블 - 학번, 주민등록번호
대체키(Alternate Key)
: 기본키로 사용될 수 있지만 실제로는 사용되지 않는 키(후보키 - 기본키)
Ex) 학생 테이블 - 기본키로 학번을 사용하면 주민등록번호는 대체키
슈퍼키(Super Key)
: 테이블 내에서 각 행을 유일하게 식별할 수 있는 하나 또는 하나 이상의 칼럼의 조합
- 유일성만 만족하면 됩니다.
- 최소성은 보장하지 않을 수 있습니다.
Ex) 학생 테이블 - {학번, 주민등록번호}
'DB' 카테고리의 다른 글
[데이터베이스] 조인의 원리 (0) | 2024.05.29 |
---|---|
[데이터베이스] 조인 JOIN (0) | 2024.05.28 |
[데이터베이스] 종류 (0) | 2024.05.21 |
[데이터베이스] 트랜잭션 Transaction (0) | 2024.05.21 |
[데이터베이스] ERD, 제1 정규형, 제2정규형, 제3 정규형, 보이스/코드 정규형 (0) | 2024.05.17 |