티스토리 뷰
1️⃣ 데이터베이스 소개
- 데이터는 현실 세계에서 수집된 단순한 사실과 값들을 모아 놓은 것
- 정보는 데이터를 특정 목적에 의해 해석하거나 가공한 형태
데이터베이스
: 데이터들의 집합
- 한 조직 안에서 여러 사용자와 응용 프로그램이 공동으로 사용하는 데이터들을 통합하여 저장하고 운영하는 데이터
데이터베이스의 필요성
예전에는 파일 처리 시스템을 사용하여 데이터를 공유
→ 파일처리 시스템의 한계
- 데이터의 구조가 바뀌면 응용 프로그램의 구조도 바뀌어야 한다. (데이터 종속의 문제)
- 응용 프로그램 별로 데이터를 생성할 수 있기 때문에 데이터가 중복될 수 있다. (데이터 중복의 문제)
- 데이터의 무결성을 지킬 수 없다.
💡 용어해설
무결성 : 데이터가 정확하고 일관된 형태로 유지되는 것
→ 데이터의 무결성을 보장한다는 것은 데이터가 안정적으로 보관된다는 의미
데이터베이스의 특징
- 실시간 접근성 : 사용자가 원할 때 언제든지 접근 가능해야 한다.
- 지속적인 변화 : 데이터의 삽입, 삭제, 갱신을 통해 최신 데이터를 유지해야 한다.
- 동시 공유 : 여러 사용자가 동시에 이용할 수 있어야 한다.
- 내용에 대한 참조 : 데이터가 저장된 물리적 위치가 아닌 값을 가지고 검색할 수 있어야 한다.
2️⃣ 데이터베이스 종류
- RDB(Relational Database)는 관계형 모델을 기반으로 SQL을 이용해 데이터를 관리한다.
- NoSQL(Not only SQL)은 데이터 간의 관계를 정의하지 않고 RDB보다 유연한 모델을 이용한다.
관계형 데이터베이스 (RDBMS)
- 데이터를 행과 열을 가지는 테이블로 표현한다.
- 테이블 간의 관계를 이용해 데이터를 효과적으로 관리하여 데이터의 무결성을 보장한다.
- 정의된 테이블(스키마)에 맞게 데이터가 삽입되므로 데이터의 안정성을 보장한다.
- 데이터의 구조가 일관적인 경우에 주로 사용한다.
→ 관계를 기반으로 데이터의 중복이 없이 효과적으로 데이터를 관리
RDBMS의 종류
MySQL, PostgreSQL, MariaDB, Oracle, MSSQL, ...
비관계형 데이터베이스 (NoSQL)
- 데이터를 저장할 수 있는 유형의 제한이 없다.
- 새로운 유형의 데이터를 추가하기 용이하다.
- 데이터의 구조가 일관적이지 않고 자주 변경되는 경우에 적합하다.
- 대용량의 데이터(이미지, 음성 등)를 더 빠르게 처리할 수 있다.
→ 안정성이 조금 떨어지더라도 유연한 데이터 처리 및 처리속도가 중요한 경우 NoSQL을 활용
ex) 온도, 습도, 바람 등의 데이터를 실시간으로 가져와 날씨를 예측하는 시스템이 있다면..
NoSQL의 종류
MongoDB, Redis, Apache Cassandra, ...
RDB vs NoSQL
RDB | NoSQL |
행과 열로 구성된 테이블로 데이터를 표현 | 데이터 표현 방식이 고정적이지 않음 |
관계 모델을 기반으로 데이터를 관리 | 일반적으로 대용량의 데이터를 RDB보다 빠르게 처리할 수 있음 |
데이터의 무결성과 안정성이 중요한 경우 사용 | 데이터의 구조가 일관적이지 않은 빅데이터를 처리하는 경우 사용 |
MySQL, PostgreSQL, MariaDB 등 | MongoDB, Redis, Apache Cassandra 등 |
→ 언제 어떤 DB를 사용할 것인가?
하나의 프로젝트에서 꼭 하나의 DB만 사용하는 것은 아니다.
RDB + NoSQL를 필요에 따라 적절하게 사용할 수 있다.
ex)
회원정보는 안정성이 중요하니 RDB로 관리
사이트 접속기록은 데이터베이스에 저장한다고 했을 때 데이터양이 무수히 많아질 수 있기 때문에 NoSQL로 관리
3️⃣ 관계형 데이터베이스 만들기
관계형 데이터베이스 구성요소
- 테이블은 행과 열로 구성
- 속성은 데이터의 특성을 나타내는 가장 작은 논리적 단위를 의미
- 튜플은 속성이 모여 구성된 각각의 행을 의미
- 도메인은 속성이 가질 수 있는 값의 집합
관계형 데이터베이스에서의 '관계'
관계가 없다면 주문번호를 ID, 이름, 주소와 함께 관리해야 한다.
→ 그러면 주문번호를 저장하기 위해 이름과 주소 데이터를 중복해서 저장해야 한다.
→ 관계가 있다면 하나의 속성으로 테이블을 연결해서 데이터를 효과적으로 관리할 수 있다.
테이블 정의하기 (MySQL 사용)
CREATE TABLE 테이블명(속성1 데이터타입1, 속성2 데이터타입2, ...);
정의한 테이블 확인
SHOW TABLES;
테이블의 구조 확인
DESC customer;
💡 SQL 작성 규칙
- SQL 문법은 대문자로 작성하는 것을 권장한다.
- 테이블명, 속성명은 소문자로 작성하는 것을 권장한다.
- 이름은 항상 의미가 잘 드러나도록 작성한다.
- 이름에 여러 단어를 혼합하는 경우 "_"를 이용해 구분한다.
- "--"을 이용해 주석을 나타낼 수 있다.
- 명령어 끝에는 세미콜론(;)을 작성한다.
→ 이외에도 여러 규칙이 있을 수 있으며, DBMS마다 필수로 지켜야하는 규칙이 차이가 있을 수 있다.
데이터 삽입하기
INSERT INTO 테이블명(속성1, 속성2, ...) VALUES(속성값1, 속성값2, ...);
- 속성의 순서는 중요하지 않다.
- 모든 속성을 테이블의 정의한 순서대로 입력하는 경우 속성목록은 생략 가능하다.
→ 속성값을 넣지 않는 경우 default 값인 NULL이 삽입된다.
데이터 조회하기
SELECT 속성1, 속성2, ... FROM 테이블명;
- 출력하고 싶은 속성을 조절 가능하다.
- "*"를 이용해 모든 속성을 출력 가능하다.
4️⃣ 데이터베이스 정의어
SQL (Structured Query Language)이란 관계형 데이터베이스를 활용하기 위해 사용하는 표준 언어이다.
1) 데이터 정의어(DDL, Data Definition Language)
: 테이블과 같은 데이터 구조 정의
2) 데이터 조작어(DML , Data Manipulation Language)
: 데이터 조회 및 검색
3) 데이터 제어어(DCL , Data Control Language)
: 데이터베이스에 접근하는 권한 관리
테이블 정의하기
CREATE TABLE 테이블명(속성1 데이터타입1 제약조건1, 속성2 데이터타입2 제약조건2, ...);
CREATE TABLE customer(
id VARCHAR(10) NOT NULL,
name VARCHAR(10) NOT NULL,
address VARCHAR(30) NULL
);
💡 용어해설
NULL : 비어있는 값 ↔ NOT NULL
💡 데이터타입
- 데이터 타입은 문자, 숫자, 날짜 등 여러가지가 있다.
- 제공되는 데이터 타입은 DBMS마다 차이가 있을 수 있다.
- MySQL 데이터 타입 알아보기 : https://dev.mysql.com/doc/refman/8.0/en/data-types.html
자료형 | 의미 |
VARCHAR(n) | n Bytes 크기의 가변 길이 문자열 데이터 |
INT | 정수형 숫자 데이터(4Bytes) |
FLOAT | 4Bytes 크기의 부동 소수점 데이터 |
DATETIME | 날짜와 시간 형태의 기간 데이터 (YYYY-MM-DD HH:MM:SS) |
... | ... |
테이블 수정하기
-- 컬럼 추가
ALTER TABLE 테이블명 ADD COLUMN 컬럼명 데이터타입 제약조건;
-- 컬럼 수정
ALTER TABLE 테이블명 MODIFY COLUMN 컬럼명 데이터타입 제약조건;
-- 컬럼 이름 변경
ALTER TABLE 테이블명 CHANGE COLUMN 기존컬럼명 새로운컬럼명 데이터타입 제약조건;
-- 컬럼 삭제
ALTER TABLE 테이블명 DROP COLUMN 컬럼명;
-- 테이블 이름 변경
ALTER TABLE 기존테이블명 RENAME 새로운테이블명;
테이블 삭제하기
DROP TABLE 테이블명;
이 글은 엘리스의 AI트랙 5기 강의를 들으며 정리한 내용입니다.
'개발공부 > 🧺 DBMS' 카테고리의 다른 글
[DB] 데이터 모델링 (0) | 2022.09.19 |
---|---|
[DB] 데이터베이스 구성하기 (0) | 2022.09.17 |
프론트엔드 개발자 삐롱히의 개발 & 공부 기록 블로그