관계형 데이터베이스(relational database)란?
관계형 데이터베이스는 현재 가장 많이 사용되고 있는 데이터베이스의 한 종류이다.
관계형 데이터베이스란 테이블(table)로 이루어져 있으며, 이 테이블은 키(Key)와 값(value)의 관계를 나타낸다.
이처럼 데이터의 종속성을 관계(relationship)로 표현하는 것이 관계형 데이터베이스의 특징이다.
위의 사진처럼 테이블은 이름을 가지고 있으며, 행(row)과 열(column) 그리고 거기에 대응하는 값을 가진다.
관계형 데이터베이스는 위와 같이 구성된 테이블이 다른 테이블들과 관계를 맺고 모여있는 집합체로 이해할 수 있다.
관계형 데이터베이스 용어
1. 열(column)
각각의 열은 유일한 이름을 가지고 있으며, 자신만의 타입을 가지고 있다. 이러한 열은 필드(field) 또는 속성(attribute)라고도 불린다.
2. 행(row)
행은 관계된 데이터의 묶음을 의미한다. 한 테이블의 모든 행은 같은 수의 열을 가지고 있다. 이러한 행은 튜플(tuple) 또는 레코드(record)라고도 불린다.
3. 값(value)
테이블은 각각의 행과 열에 대응하는 값을 가진다. 이러한 값은 열의 타입에 맞는 값이어야 한다.
4. 키(key)
테이블에서 행의 식별자로 이용되는 열을 키(key) 또는 기본 키(Primary Key) 라고 한다.
즉, 테이블에 저장된 레코드를 고유하게 식별하는 후보 키(candidate key) 중에서 데이터베이스 설계자가 지정한 속성을 의미한다.
5. 관계(relationship)
테이블 간의 관계는 관계를 맺는 테이블의 수에 따라 다음과 같이 나눌 수 있다.
- 일대일 (one-to-one) 관계
- 일대다 (one-to-many) 관계
- 다대다 (many-to-many) 관계
관계형 데이터베이스에는 이러한 관계를 나타내기 위해 외래 키(foriegn key)라는 것을 사용한다.
외래 키는 한 테이블의 키 중에서 다른 테이블의 행(row)을 식별할 수 있는 키를 의미한다.
6. 스키마(schema)
스키마는 테이블을 디자인하기 위한 청사진이라고 할 수 있다.
이러한 스키마는 테이블의 각 열에 대한 항목과 타입뿐만 아니라 기본 키와 외래 키도 나타내야 한다.
필드는 데이터 유형뿐만 아니라 제약사항도 지정할 수 있는데 이러한 제약사항을 스키마라고 부른다. 예를 들어 필드는 중복 값을 해당 행에 저장할 수 없다거나, 반드시 값을 가져야 한다(not null)는 조건 등을 걸 수 있다.
관계형 데이터베이스의 제약 조건
무결성(Integrity) : 데이터의 정확성과 일관성을 유지하기 위한 제약 조건
- 개체 무결성(Entity Integrity): 각 테이블의 기본 키는 NULL 값을 가질 수 없고, 중복될 수 없음
- 참조 무결성(Referential Integrity): 외래 키를 사용하여 두 테이블 간의 관계를 정의할 때, 외래 키 값은 반드시 참조하는 테이블의 기본 키 값과 일치해야 됨
- 도메인 무결성(Domain Integrity): 각 속성은 정의된 도메인(값의 범위)에 맞는 값을 가져야 함. 예를 들어, 나이는 0 이상이어야 한다는 규칙이 도메인 무결성의 예
정규화(Normalization)
정규화는 데이터의 중복을 최소화하고 데이터베이스의 일관성을 유지하기 위한 방법론. 각 정규형은 특정한 규칙을 만족시켜 데이터베이스 구조를 개선
- 제1 정규형(1NF): 모든 속성 값이 원자적(atomic)인 값이어야 함. 즉, 하나의 속성에 여러 값이 저장되어서는 안 됨.
- 제2 정규형(2NF): 1NF를 만족하면서, 기본 키에 속하지 않는 모든 속성이 기본 키에 완전히 종속적이어야 함. 부분 종속성을 제거하는 것이 목적.
- 제3 정규형(3NF): 2NF를 만족하면서, 기본 키가 아닌 속성들이 서로 종속되지 않아야 함. 즉, 이행적 종속성을 제거해야 함.
관계형 데이터베이스에서의 관계
관계형 데이터베이스는 왜 관계라는 이름이 붙여졌을까?
각 테이블의 행과 행이 연결되는 관계를 맺을 수 있기 때문이다. 앞서 설명했듯이 테이블 간의 관계는 일대일(1:1),
일대다(1:N), 다대다(N:N)의 관계가 있다. 우리는 하나의 테이블에 필요한 모든 필드를 넣고 모든 데이터 항목을 저장할 수 있다. 하지만 이렇게 하면 데이터들이 중복해서 저장되는 상황이 발생할 수 있어 아래 테이블 그림과 같이 비효율 적이다.
위와 같이 고객의 상품 주문을 저장하는 테이블이 있다고 가정하면 특정 고객이 여러 상품을 구매하는 경우 고객 이름과 고객 지역 데이터가 계속 해서 중복된다. 얼핏보기에는 별 문제 없어 보이지만 만약 고객의 지역이 변경된다고 생각해보자. 그림은 데이터가 3개 뿐이지만 만약 수십, 수백만 그 이상의 데이터라면 쉬운일이 아니다.
그래서 관계형 데이터베이스 모델에서는 다음 그림과 같이 테이블을 분리하여 행과 행을 연결할 수 있다.
위의 그림과 같이 테이블 간의 관계는 기본 키(PK)와 외래 키(FK)라는 개념을 사용하여 맺어질 수 있다.
기본 키는 고유한 ID필드로 그림에서는 고객 번호 필드이다. 이 필드는 각 행이 중복된 값을 가질 수 없다.
외래 키는 기본 키를 참조하는 필드로 그림에서는 주문 테이블의 고객 번호 필드이고 각 테이블의 행을 연결시켜주는 역할을 한다.
이렇게 테이블을 분리하고 관계를 형성해 데이터를 효율적으로 관리할 수 있다.
(테이블을 분리하고 중복 데이터를 제거하는 과정을 정규화 라고 한다.)
트랜잭션(transaction)이란
트랜잭션은 데이터베이스 관리시스템(DBMS)에서 하나의 작업의 단위이다.
데이터베이스는 여러 사람들이 데이터를 공유하고 사용할 목적으로 사용된다. 그렇기 때문에 다수의 사람들이 동시에 사용하더라도 데이터에 문제가 없어야 한다. 트랜잭션은 모든 명령문을 완벽하게 처리하거나, 하나의 명령문이라도 문제가 발생하면 모든 명령문을 수행하지 않고 데이터를 보존하는 기능을 하고 해야한다.
트랜잭션의 예시에 가장 적합한게 은행이라고 볼 수 있다. 예를들어 A계좌에 1000원이 있다고 하자. 이때 서로 다른 2대의 ATM 기기에서 동시에 A계좌의 1000원을 인출하려고 한다. 정말 거의 동시에 인출을 시도했을 때 트랜잭션이 제대로 기능하지 않아 두명 다 각각 1000원씩 인출해 간다면 은행은 아마 파산할 것이다. 그래서 은행은 두 트랜잭션을 모두 수행하지 않거나, 0.000001 초라도 빠른 사람의 요청을 수행하고 나머지 사람에게는 지급부족으로 요청을 거절해야 한다.
위와 같은 트랜잭션의 기능을 제대로 수행하기 위해서는 네 가지 특성을 만족해야하는데 ACID 특성이라고 부른다.
- 원자성 (Atomicity) : 원자성이란 트랜잭션이 수행하는 연산들을 모두 정상적으로 처리하거나 모두 처리하지 않아야 한다는 all-or-nothing 방식을 의미한다.
- 일관성 (Consistency) : 일관성은 트랜잭션이 성공적으로 수행된 이후에도 데이터베이스의 데이터는 일관된 상태를 유지해야 한다는 의미이다.
- 격리성 (Isolation) : 격리성은 하나의 트랜잭션이 완료될 때까지 다른 트랜잭션이 간섭하지 못하도록 하여 각각의 트랜잭션이 독립적으로 수행되어야 한다는 의미이다.
- 지속성 (Durability) : 지속성은 트랜잭션이 성공적으로 완료된 이후에 데이터베이스의 데이터들이 영구적으로 보존되어야 한다는 의미이다.
'백엔드' 카테고리의 다른 글
소셜로그인 어떻게 도입할까? (1) | 2024.09.22 |
---|---|
ERD 설계? 어떻게 진행할까? (0) | 2024.09.18 |
SSR? CSR? 렌더링 방식의 차이와 이해 (2) | 2024.09.06 |
웹 브라우저의 호출과정 (1) | 2024.09.05 |
sping 과 springBoot의 차이점 (1) | 2024.09.05 |