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

bubblegum·2024년 1월 24일
0

DB

목록 보기
9/11
post-thumbnail

관계형 데이터베이스

1. 관계형 데이터베이스

관계형 데이터베이스(RDB, Relational DataBase)는 데이터의 정규화와 무결성을 보장하면서 정형화된 데이터를 효과적으로 관리할 수 있는 데이터베이스의 한 종류이다. RDB는 테이블(Table)이라는 구조를 가지며, 각 테이블은 고유한 데이터를 나타내는 행(row)과 데이터의 속성을 나타내는 열(column)을 가진다.

2. MySQL

MySQL은 오픈 소스 데이터베이스로, 데이터베이스를 관리하는 가장 대표적인 언어인 SQL(Structured Query Language)을 사용하여 데이터를 조작하고 관리할 수 있습다. 트랜잭션(transaction)의 특징인 ACID를 준수하여 구현된 데이터베이스로써, 트랜잭션을 안전하게 처리할 수 있습니다.

트랜젝션(transaction)
데이터베이스와 데이터 스토리지 시스템이라는 맥락에서 트랜잭션이란 한 단위의 작업으로 취급되는 모든 작업을 말합니다. 트랜잭션은 완전히 완료되기도 하고 전혀 완료되지 않을 수도 있으며, 스토리지 시스템을 한결같은 상태로 둡니다.

ACID(아키드)
트랜잭션을 정의하는 4가지 중대한 속성 -- 원자성(Atomicity), 일관성(Consistency), 신뢰성(Reliability), 격리(Isolation) 그리고 영속성(Durability) -- 을 의미한다. 데이터베이스 작업에 이러한 ACID 속성이 있다면 이를 ACID 트랜잭션이라 부르면 되고, 이런 작업을 적용하는 데이터 스토리지 시스템을 트랜잭션 시스템이라고 한다.

3. RDS

RDS(Relational Database Service)는 AWS에서 제공하는 관계형 데이터베이스 서비스이다. RDS는 서버 운영, 유지보수, 백업과 같이 데이터베이스 관련 작업을 AWS에게 위임한다. 구매한 RDS의 host, user, password, port, certificate file path를 MySQL에 등록하므로써 AWS와 연결할 수 있다.


SQL의 종류

데이터베이스에서 사용되는 생성, 삽입, 조회 명령문을 SQL(Structured Query Language)이라고 한다.

1. DDL

데이터베이스를 생성, 수정, 삭제할 때 사용한다.

✨CREATE

DATABASE, TABLE, VIEW, INDEX 등을 생성할 때 사용한다.

CREATE DATABASE 데이터베이스명;
CREATE TABLE 테이블명
{
 컬럼명 컬럼속성
}

✨DROP

DATABASE, TABLE, VIEW, INDEX 등을 삭제할 때 사용합니다.

DROP DATABASE 데이터베이스명;
DROP TABLE 테이블명;

✨ALTER

DATABASE, TABLE 등의 속성을 변경할 때 사용합니다.

ALTER DATABASE 데이터베이스명 변경조건;
ALTER TABLE 테이블명 ADD 변경조건; -- 테이블에 새로운 컬럼을 추가합니다.
ALTER TABLE 테이블명 DROP 변경조건; -- 테이블에서 컬럼을 삭제합니다.
ALTER TABLE 테이블명 MODIFY 변경조건; -- 테이블의 컬럼을 수정합니다.
ALTER TABLE 테이블명 RENAME 변경조건; -- 테이블의 이름을 변경합니다.
...

2. DML

데이터를 저장, 삭제, 수정, 조회할 때 사용한다.

✨SELECT

일반적으로 TABLE에서 원하는 데이터들을 조회할 때 사용합니다.

SELECT 컬럼목록 FROM 테이블명 [WHERE 조건];

SELECT JOIN 연산자

JOIN 연산자는 두 테이블 사이의 공통된 데이터를 기준으로 테이블을 연결하여 하나의 테이블처럼 조회 할 수 있게 해주는 연산자입니다.

JOIN 연산자는 SQL의 제약 조건은 아닙니다. 여러 테이블 간의 외래 키(Foreign Key)로 설정된 컬럼들을 연결하여 조회하는 SELECT 연산자의 활용법 중 하나입니다.

SELECT p.postId, p.title, p.content, u.email
FROM Posts as p
JOIN Users as u
	ON p.userId = u.userId;

as(alias, 별칭)은 여러개의 테이블을 참조할 때, 특정 테이블을 간단하게 나타내기 위해 사용합니다.

✨INSERT

TABLE에 새로운 데이터들을 삽입할 때 사용합니다.

INSERT INTo 테이블명 (컬럼목록) VALUES (값목록);

✨DELETE

TABLE에서 특정한 조건에 맞는 데이터들을 삭제할 때 사용합니다.
WHERE 조건이 없다면, 모든 데이터가 삭제됩니다.

DELETE FROM 테이블명 [WHERE 조건];

✨UPDATE

TABLE에서 특정한 조건에 맞는 데이터들을 수정할 때 사용합니다.
WHERE 조건이 없다면, 모든 데이터가 수정됩니다.

UPDATE 테이블명 SET 컬럼 =[WHERE 조건];

3. DCL

데이터베이스에 대한 권한과 관련된 문법으로 특정 유저가 DB에 접근할 수 있는 권한을 설정할 때 사용한다.

✨GRANT

데이터베이스의 특정한 유저에게 사용 권한을 부여할 때 사용합니다.
권한에는 SELECT, INSERT, UPDATE, DELETE 등 다양한 종류가 존재합니다.

GRANT [권한] ON 객체명 TO 사용자;

✨REVOKE

데이터베이스의 특정한 유저에게 사용 권한을 취소할 때 사용합니다.

REVOKE [권한] ON 객체명 FROM 사용자;

4. TCL

데이터베이스 내의 트랜잭션을 관리하는 문법으로, 트랜잭션의 시작과 종료, 그리고 롤백을 수행할 때 사용합니다.

✨COMMIT

데이터베이스의 작업이 정상적으로 완료되었음을 관리자에게 알려줄 때 사용합니다.

START TRANSACTION;
...
COMMIT;

✨ROLLBACK

데이터베이스의 작업이 비정상적으로 완료되었음을 관리자에게 알려줄 때 사용한다. 작업 중 오류가 발생한 경우 이를 취소하고, 이전 상태로 되돌릴 때 사용합니다.

START TRANSACTION;
...
ROLLBACK;

SQL 제약 조건

제약 조건(Constraint)은 각 컬럼들간의 제한사항을 관리하고, 조건을 위반하는 데이터를 방지하여 데이터베이스의 무결성(Integrity)을 보장하는 규칙입니다.

무결성(Integrity): 데이터가 결함없이 정확하고 완전한 상태를 의미합니다.

제약 조건의 종류

Unique(고유) 제약 조건

  • 테이블에 소속된 특정 컬럼이 중복된 키를 가질 수 없는 조건
  • 사용자 아이디, 이메일과 같은 고유한 정보를 저장할 때 사용합니다.

NULL(빈 값) 제약 조건

  • 특정 컬럼이 아무런 값을 입력받지 않도록 설정하거나, 무조건 값을 입력 받도록 설정하는 조건
  • 데이터가 없다면, NULL을 저장하여, 데이터가 존재하지 않다는것을 표현합니다.
  • 특정 컬럼에서 NULL 값을 허용하지 않아야 할 때는 NOT NULL 제약 조건을 추가하여 해당 컬럼에 NULL 값이 입력되는 것을 방지해야 합니다.

Primary Key(기본 키) 제약 조건

  • 테이블 내에서 각 행(row)을 고유하게 식별할 수 있도록 보장하는 조건

Foreign Key(외래 키) 제약 조건

  • 한 테이블의 컬럼(Column)이 다른 테이블의 특정 행(Row)을 참조하도록 설정하는 조건.

AUTO_INCREMENT
: 데이터를 삽입할 때 아무런 데이터를 입력하지 않더라도 고유한 값을 유지할 수 있도록 도와주는 속성.

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

CASCADE

참조하고 있는 개체가 변경/삭제 될 경우 함께 변경/삭제됩니다.
ex) 사용자가 삭제된다면, 그 사용자의 모든 주문 내역도 삭제됩니다.

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

NO ACTION

참조하고 있는 개체가 변경/삭제 될 경우 아무런 행위를 하지 않고 에러가 발생하게됩니다.
ex) 사용자를 삭제할 때, 사용자의 주문 내역이 아직 존재한다면, 삭제를 막습니다.

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

SET NULL

참조하고 있는 개체가 변경/삭제 될 경우 현재 데이터를 NULL로 변경합니다.
ex) 사용자가 삭제되면, 사용자의 주문 내역의 ‘사용자 ID’는 NULL로 변경됩니다.

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

SET DEFAULT

참조하고 있는 개체가 변경/삭제 될 경우 현재 데이터를 기본 값으로 변경합니다.
ex) 사용자가 삭제되면, 사용자의 주문 내역의 ‘사용자 ID’는 기본 값으로 변경됩니다.

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

테이블의 연관 관계

  • 1:1
    하나의 테이블이 다른 테이블의 오직 한 가지의 열과 관계를 맺는 것

    create table Star (
      starId int(11) not null auto_increment primary key
    );
    
    create table StarInfo( 
      starInfoId int(11) not null auto_increment primary key,
      starId int(11) not null unique,
      starName not null varchar(225),
      magnitude not null varchar(225),
      distance not null varchar(225), 
      foreign key (starId) references Star(starId)
    );
  • 1:N
    하나의 테이블이 다른 테이블의 여러 개의 열과 관계를 맺는 것

    create table Publisher (
      publisherId int(11) not null auto_increment primary key,
      publisherName varchar(225) not null,
      publisherAddress varchar(225) not null
    );
    
    create table Books (
      bookId int(11) not null auto_increment primary key,
      publisherId int(11) not null,
      bookName varchar(225) not null,
      foreign key (publisherId) references Publisher (publisherId)
    );
  • N:M
    여러 테이블이 관계를 맺는 것

    create table Idol (
      idolId int(11) not null auto_increment primary key,
      name varchar(225) not null unique, 
      age int(11) null,
      gender enum("M", "F")
    );
    
    create table production (
      productionId int(11) not null auto_increment primary key,
      productionName varchar(225) not null unique,
      address varchar(225) not null unique
    );
    
    create table ProductionMember(
      memberId int(11) not null auto_increment primary key,
      idolId int(11) not null,
      productionId int(11) not null,
      debutDate date not null, 
      foreign key (idolId) references Idol(idolId),
      foreign key (productionId) references production(productionId)
    );
profile
황세민

0개의 댓글