dh_0e

[Node.js] 강의 내용 개념 정리(1) (RDB, SQL 제약 조건) 본문

내일배움캠프/Node.js[숙련]

[Node.js] 강의 내용 개념 정리(1) (RDB, SQL 제약 조건)

dh_0e 2024. 5. 22. 21:00

관계형 데이터베이스(RDB)

  • 정형화된 데이터를 관리하거나 복잡한 비즈니스 로직을 구현하기에 적합하지 않다는 문제점이 있음

ex) MongoDB에서 여러 컬렉션을 합쳐 조회하려고 할 때, 특정 필드가 존재하지 않는다면 문제 발생

> 이와 같은 문제점을 해결하기 위해 데이터의 정규화와 무결성을 보장하면서 정형화된 데이터를 효과적으로 관리할 수 있는 관계형 데이터 베이스(RDB)가 탄생함

출처: https://www.pragimtech.com/blog/

  • 관계형 데이터베이스는 각 데이터를 '테이블'이라는 표 형태의 구조에 저장
  • 테이블 간에 연관 관계를 설정할 수 있음 즉, 여러 테이블에 분산된 데이터를 서로 연결하여 관리할 수 있음
  • 각 테이블은 고유한 데이터를 나타내는 행(row)과 데이터의 속성을 나타내는 열(column)을 가짐

 

관계형 데이터베이스(RDB) vs 비관계형 데이터베이스(NoSQL)

  • 데이터 형식이 자유로웠던 비관계형 데이터베이스와 달리 관계형 데이터베이스는 "테이블"이라는 개념이 존재하여 엑셀의 표와 같이 여러개의 열과 행을 가짐
  • 엑셀 파일 - 데이터베이스 / 엑셀 시트 - 테이블 / 행 - 데이터

엑셀과 다른 점은 테이블(표)들 간에 서로 연관 관계를 가질 수 있음

  • 비관계형 데이터베이스는 유연한 데이터 구조를 가지므로 저장과 읽기 작업이 더욱 빠르며, 복잡한 비즈니스 로직 없이 주로 데이터 읽기와 쓰기에 중점을 둔 서버에서 사용 (빅데이터 환경이나 단순 페이지뷰가 많은 application)
  • 관계형 데이터베이스는 더욱 복잡한 비즈니스 로직과 정형화된 데이터를 체계적으로 관리할 수 있어 더욱 안전한 서버 환경 구성이 가능함 (보안이 중요한 기관이나, 은행과 같은 안정성을 중시하는 회사)

 

MySQL

  • 가장 널리 사용되는 오픈소스 관계형 데이터베이스(RDB)
  • 다른 DBMS와 달리 라이센스 비용이 들지 않음 (엔터프라이즈 버전에선 추가적으로 비용 발생)
  • 트랜잭션의 특징인 ACID를 준수하여 구현되어 트랜잭션을 안전하게 처리할 수 있음

트랜잭션이란?

by ChatGPT

 

RDS

  • AWS에서 제공하는 관계형 데이터베이스 서비스(RDB)
  • 서버 운영, 유지보수, 백업과 같이 데이터베이스 관련 작업을 AWS에게 위임하여 백엔드 개발자가 데이터베이스를 사용하는 것에 집중할 수 있게 해줌

 

SQL 제약 조건

  • 각 컬럼들간의 제한사항을 관리하고, 조건을 위반하는 데이터를 방지하여 데이터베이스의 무결성을 보장하는 규칙

무결성: 데이터가 결함없이 정확하고 완전한 상태를 의미

 

제약 조건의 종류

  • 고유 제약 조건(Unique): 특정 컬럼이 중복된 키를 가질 수 없는 조건, 사용자 아이디, 이메일과 같은 고유한 정보를 저장할 때 사용
  • NULL 제약 조건(NULL): 특정 컬럼이 아무런 값을 입력받지 않도록 or 무조건 값을 입력 받도록 설정하는 조건, 데이터가 없다면 NULL을 저장하여 데이터가 존재하지 않는다는 것을 표현
  • 기본 키 제약 조건(Primary Key): 테이블 내에서 각 행을 고유하게 식별할 수 있도록 보장하는 조건
  • 외래 키 제약 조건(Foreign Key): 테이블간의 연관 관계를 설정하는 조건, 한 컬럼이 다른 테이블의 컬럼 or 행을 참조하도록 설정하는 조건

 

외래 키 제약 조건 심화

  • 외래 키의 경우 다른 테이블과 관계를 맺고 있는 참조 데이터가 삭제 or 수정될 때 어떤 행위를 해야 하는지 설정할 수 있음.
  • 이를 연계 참조 무결성 제약 조건이라 함

 

연계 참조 무결성 제약 조건의 종류

1. CASCASDE: 참조하고 있는 개체가 변경/삭제 될 경우 함께 변경/삭제 됨

FOREIGN KEY (userId) REFERENCES Users(userId)
    ON DELETE CASCADE
    ON UPDATE CASCADE;

2. NO ACTION: 참조하고 있는 개체가 변경/삭제 될 경우 아무런 행위를 하지 않고 에러를 발생시킴

FOREIGN KEY (userId) REFERENCES Users(userId)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION;

3. SET NULL: 참조하고 있는 개체가 변경/삭제 될 경우 현재 데이터를 NULL로 변경

FOREIGN KEY (userId) REFERENCES Users(userId)
    ON DELETE SET NULL
    ON UPDATE SET NULL;

4. SET DEFAULT: 참조하고 있는 개체가 변경/삭제 될 경우 현재 데이터를 기본 값으로 변경

FOREIGN KEY (userId) REFERENCES Users(userId)
    ON DELETE SET DEFAULT
    ON UPDATE SET DEFAULT;

 

 

SELECT JOIN 연산자

  • 두 테이블 사이의 공통된 데이터를 기준으로 테이블을 연결하여 하나의 테이블처럼 조회할 수 있게 해주는 연산자
  • SQL의 제약 조건이 아님
  • 여러 테이블 간의 외래 키로 설정된 컬럼들을 연결하여 조회하는 SELECT 연산자의 활용법 중 하나
  • JOIN 연산자는 데이터를 조회할 때, 여러 테이블들의 연간 관계를 포함하여 데이터를 조회함

 

별칭(alias)

  • 여러 개의 테이블을 참조할 때, 특정 테이블을 간단하게 나타내기 위해 별명을 붙이는 것
  • JOIN ... ON: 두 개 이상의 테이블을 결합할 때, 어떤 조건으로 테이블을 결합할 것인지를 정의함
  • ON 뒤에는 결합 조건이 위치하며 두 테이블 간의 관계를 정의함