2023. 12. 26. 20:18ㆍ스프링
데이터베이스(Database)와 DBMS(Database Management System)
데이터베이스(Database)
여러 사람이 공유할 목적으로 사용되는 정보의 집합이다.
단순히 데이터를 저장할 수 있는 창고, 라고 보면 된다.
DBMS(Database Management System)
데이터 베이스가 창고라면, DBMS는 해당 창고를 구축하고, 데이터를 저장하거나, 조회 및 처리하는 등의 데이터와 관련된 업무를 수행할 수 있는 별도의 소프트웨어다.
여러 애플리케이션들이 데이터베이스에 접근하여 데이터를 조작할 수 있는 인터페이스를 제공하고, 장애에 대한 복구 기능, 사용자별 권한 관리 기능 및 보안 관련 기능을 제공한다.
DBMS의 종류
RDBMS (Relational Database Management System)
테이블 형태로 데이터를 저장하고 관리하는 시스템이다. 데이터는 행(row)과 열(column)로 구성된 테이블에 저장되며, 테이블 간의 관계를 통해 데이터를 구조화한다. 가장 범용적으로 쓰인다.
대표적으로 MySQL, PostgreSQL, Oracle Database, Microsoft SQL Server 등이 있다.
NoSQL(Not only SQL) DBMS
전통적인 RDBMS의 제약을 벗어나 다양한 형태의 데이터 모델 및 스키마를 지원하는 DBMS를 말한다.
대표적으로 MongoDB, CockroachDB, Cassandra 등이 있다.
In-Memory DBMS
메모리에 데이터를 저장하고 관리하는 DBMS로, 빠른 읽기 및 쓰기 성능을 제공합니다. 주로 실시간 분석 및 처리에 사용된다.
Redis, Memcached, LevelDB, RocksDB 등이 있다.
Graph Database
그래프 형태의 데이터를 저장하고 관리하는 DBMS로, 복잡한 관계를 쉽게 표현하고 검색할 수 있다.
AmazoneNeptune, Neo4j 등이 있다.
Time-Series Database
시계열 데이터를 저장하고 관리하는 DBMS이다.
OpenTSDB, InfluxDB 등이 있다.
도메인의 요구 조건에 맞게, 적절한 DBMS를 선택하여 사용해야한다. 현업에서는 두 개 이상의 DBMS를 사용할 때도 많다고 한다! 데이터베이스와 DBMS는 의미론적으로 다른 용어긴 하지만, 현업에서는 주로 데이터베이스란 용어를 통합적으로 사용한다.
SQL(Structured Query Language)
DDL(Data Definition Language) - 데이터 정의 언어
데이터베이스 및 테이블의 구조를 정의하는 역할이다. 명령어를 입력하는 순간 즉시 반영(Auto Commit) 된다.
CREATE : 데이터베이스 및 테이블 생성
ALTER : 데이터베이스 및 테이블 구조 수정
DROP : 데이터베이스 및 테이블 삭제
RENAME : 데이터베이스 및 테이블 이름 변경
TRUNCATE : 데이터베이스 및 테이블 초기화(데이터 초기화)
DML(Data Manipulation Language) - 데이터 조작 언어
내부 데이터 관리의 역할이다.
즉시 반영(Auto Commit) 되지않고, ROLLBACK으로 되돌릴 수 있다. 우리가 배운 트랜잭션의 하위 작업으로 설정된다.
SELECT : 데이터 조회
INSERT : 데이터 추가
UPDATE : 데이터 수정
DELETE : 데이터 삭제
DCL(Data Control Language) - 데이터 제어 언어
데이터를 보호하기 위한 보안의 역할이다. 데이터베이스에 접근하는 권한을 부여하거나 박탈할 수 있다.
GRANT : 권한 설정
REVOKE : 권한 삭제
TCL(Transaction Control Language) - 트랜잭션 제어 언어
우리가 배운 트랜잭션을 제어하는 역할이다. @Transactional 어노테이션을 통한 여러 DML의 트랜잭션은 최종적으로 아래의 명령어로 변환되어 수행된다.
COMMIT : 트랜잭션을 정상적으로 처리
ROLLBACK : 트랜잭션을 다시 되돌림
SAVEPOINT : COMMIT 이전의 특정시점을 지정할 수 있도록 하여 반영 혹은 ROLLBACK을 가능하게함
DDL
CREATE 구문
CREATE DATABASE 데이터베이스이름;
CREATE TABLE 테이블이름
(
컬럼이름1 컬럼타입1 제약조건,
컬럼이름2 컬럼타입2 제약조건,
...
[CONSTRAINT FK제약조건이름
FOREIGN KEY (컬럼이름)
REFERENCES 참조테이블이름(참조컬럼이름)]
);
CREATE TABLE 관련 제약 조건.
NOT NULL : 해당 컬럼은 항상 NULL이 아닌 값이 들어가야한다.
UNIQUE : 해당 컬럼은 중복된 값이 있으면 안된다.
PRIMARY KEY : NOT NULL 과 UNIQUE의 특성을 모두 가진다.
FOREIGN KEY : 다른 테이블의 PRIMARY KEY 와 연결 되는 컬럼이다. 테이블 간의 관련성을 표기함으로써, 데이터의 무결성을 보장한다.
여기서 잠깐!!!! PRIMARY KEY ? FOREIGN KEY ? 어떤걸까?
PRIMARY KEY는 기본키라고 말하며 데이터베이스에서 테이블 내 각 행을 유일하게 식별할 수 있는 컬럼 혹은 컬럼의 집합이다. 각 행이 Primary Key는 모두 다르다는 것을 보장하기 때문에, 데이터를 식별할 수 있다. 마치 ID와 같은 역할을 한다고 보면 된다. foreign key 는 외래키로 데이터가 중복될 수 밖에 없을때 이를 방지하기 위해 일반적으로 모델별로 테이블을 분리한다. 그런데 어떤 테이블이 각각 달린건지 모르므로 이에 제약조건을 걸어 유일한 값이라는 것을 보장하고 테이블 간의 연관성을 표현한다.
ALTER 구문
ALTER TABLE 테이블이름 ADD 컬럼이름 컬럼타입; === 추가
ALTER TABLE 테이블이름 DROP 컬럼이름; === 삭제
ALTER TABLE 테이블이름 MODIFY COLUMN 컬럼이름 컬럼타입; === 변경
DROP 구문
DROP DATABASE 데이터베이스이름;
DROP TABLE 테이블이름;
테이블 간의 관계
1:1 관계, 1:N 관계, N:M 관계가 있다.
1:1 관계
1:N 관계
하나의 레코드가 여러 개의 레코드와 연결될 수 있는 형태다.
우리가 앞서 예시로 들었던 Post와 Comment가 대표적이다.부모 - 자식 관계라고 하기도 하며, FK는 N에 해당하는 자식 테이블에 설정된다.
N:M 관계
여러개의 레코드가 다른 테이블의 여러 레코드와 관계를 맺는 형태이다.
예를들어, 여러개의 Group, 여러 User가 있다고 가정할 때, 만약 User는 여러 Group에 참여를 할 수 있다고 한다면, User와 Group의 관계는 N:M 관계가 된다. Group에도 여러 User가 있을 수 있고, User도 여러 Group에 속할 수 도 있기 때문이다.
N:M 관계를 띄고있는 두 Table이 직접적으로 연결되진 않다. 대신에, 각각의 테이블과 1: N 관계를 형성하고 있는 테이블을 통해서 N:M 관계를 나타낼 수 있다.
DML
INSERT 구문
INSERT INTO 테이블이름(컬럼1, 컬럼2, 컬럼3, ...) VALUES(데이터값1, 데이터값2, 데이터값3, ...);
INSERT INTO 테이블이름 VALUES(데이터값1, 데이터값2, 데이터값3, ...);
INSERT INTO comment (id, content, post_id) VALUES (5, '댓글3', 1), (6, '댓글4', 2);
SELECT 구문
SELECT 컬럼이름1, 컬럼이름2, ... FROM 테이블이름 [WHERE 조건];
SELECT * FROM 테이블 이름 [WHERE 조건];
SELECT title FROM post
SELECT * FROM comment WHERE post_id=1;
UPDATE 구문
UPDATE 테이블이름 SET 컬럼이름1=데이터값1, 컬럼이름2=데이터값2, ... WHERE 조건;
UPDATE post SET title='새로운 타이틀' WHERE id=1;
이러면 Id 조건이 1인 타이틀을 새로운 타이틀로 업데이트가 가능하다..
DELETE 구문
DELETE FROM 테이블이름 WHERE 컬럼이름=데이터값;
SQL 공부했던 걸 점차 잊고 있었는뎈ㅋㅋ 다시 상기시킨 날이었다~
그래도 혼자 따로 공부를 한 적 있어서 큰 어려움은 없었다.. 다만, 더 잊을까봐 겁이 나서 블로그에 박제해서 메모해두려고 한다ㅋㅋ 이젠 잊지말자 기억하자~ 크리스마스 쉴때부터 SQL 문제를 여러 개 풀었는데 재밋더라,, 알고리즘은 진짜 너무 어려워서 손도 못대는 문제가 꽤있는데,, SQL은 비교적 너무 쉬워서 술술 풀게 된다,, 파이팅
아, 그리고 과제 시작하고 있는데 이게 맞는지 자신은 없다,, 하지만 한 번 해볼때까지 해보고 내일 튜터님께 피드백 받아야지ㅠㅠ
아 두근거려 ㅋㅋㅋ
'스프링' 카테고리의 다른 글
TIL 20231228 (0) | 2023.12.28 |
---|---|
TIL 20231227 (0) | 2023.12.27 |
TIL 20231222 (0) | 2023.12.22 |
TIL 20231221 (0) | 2023.12.20 |
TIL 20231220 (0) | 2023.12.20 |