데이터 베이스/SQL 첫걸음(인프런 강의)

Ch01. 데이터 베이스 소개 - 관계형 데이터베이스 종류

webmaster 2025. 9. 26. 21:58
728x90

관계형 데이터베이스 핵심 개념

관계형 데이터베이스는 데이터를 표의 형태로 관리한다. 이것은 사실 우리가 이미 엑셀을 통해 익숙하게 봐왔던 구조다. 용어만 다를 , 개념은 비슷하다

  • 테이블 (Table): 관계형 데이터베이스에서 데이터를 저장하는 가장 기본적인 구조다. 엑셀의 시트(Sheet)와 거의 동일한 개념이다. 우리는 쇼핑몰 데이터를 관리하기 위해 고객 테이블, 상품 테이블, 주문 테이블 등을 만들게 될 것이다. 이 테이블은 특정 주제와 관련된 데이터들의 집합이다.
  • 행(Row): 테이블의 가로줄을 의미한다. 하나의 행은 개별적인 데이터 항목 하나를 나타낸다. 예를 들어, 고객 테이블에서 하나의 행은 고객 명의 정보를 의미한다. '이순신' 고객의 정보, '강감찬' 고객의 정보 등이 각각 하나 행이 된다.
    • 실무 용어: 행은 '레코드(Record)' 또는 '튜플(Tuple)'이라고도 불린다.
  • (Column): 테이블의 세로줄을 의미한다. 열은 테이블에 어떤 종류의 데이터가 저장될지를 정의한다. 고객테이블 이라면 고객번호 , 이름 , 연락처 , 주소 등이 각각의 열이 된다.
    • 실무 용어: 열은 '속성(Attribute)' 또는 '필드(Field)'라고도 한다.

고객 테이블 예시

  • 전체 표가 바로 테이블이다. (customers)
  • 이순신 고객의 데이터 (1, 이순신, 010-1111-1111, 서울시 강남구) 바로 (Row)이다. 테이블에는 3개의 행이 있다.
  • customer_id , name , phone , address와 같은 세로 항목들이 바로 (Column)이다. 테이블은 4 열로 구성되어 있다.

관계형 데이터베이스의 시작은 이렇게 우리가 이미 알고 있는 '' 개념을 그대로 가져오는 것에서부터 출발한다. 다만, 데이터베이스는 여기에 가지 강력한 규칙을 추가하여 엑셀의 한계를 뛰어넘는다.

 

기본 (Primary Key) - 수많은 데이터 속에서 ' 하나' 식별하는 방법

문제 상황: 어떻게 데이터를 유일하게 구분할까?

order 테이블 나쁜 예시

쇼핑몰을 운영하다 보니, 이름도, 주소도, 심지어 주문한 상품까지 완전히 똑같은 주문이 들어왔다고 가정해 보자. 동명이인이 같은 날 같은 상품을 주문한 것이다. 이때, 고객 명이 주문을 취소해달라고 연락했다. 우리는 주문 어떤 것을 취소해야 할까? 이름, 주소, 상품명 그 어떤 정보로도 주문을 구분할 수가 없다. 이것이 바로 데이터의 '식별' 문제다.

 

 

Order 테이블 좋은 예시

해결: 데이터를 유일하게 만들어주는 식별자, 기본 (Primary Key): 이 문제를 해결하기 위해 관계형 데이터베이스는 기본 (Primary Key, 줄여서PK)라는개념을 도입했다.

 

기본 키란, 테이블에 있는 모든 (Row) 중에서 특정 하나를 유일하게 식별할 있는 (Column) 또는 열들의 조합 말한다. 기본 키는 가지 중요한 규칙을 반드시 지켜야 한다.

  • 고유성 (Uniqueness): 기본 키로 지정된 열의 값은 같은 테이블 내에서 절대 중복될 수 없다. 모든 행이 서로 다른 값을 가져야 한다.
  • NOT NULL: 기본 키로 지정된 열에는 반드시 값이 있어야 한다. 비어있거나(NULL) 값이 없는 상태는 허용되지 않는다

이처럼 기본 키는 데이터에 주민등록번호를 부여하는 것과 같다. 이름, 생일, 출생지가 모두 같은 사람이 존재할 수 있지만, 주민등록번호는 절대 중복되지 않는 것처럼 말이다.

 

기본 키가 필수적인가?

수많은 데이터 속에서 특정 데이터 하나를 빠르고 정확하게 찾아내고, 수정하고, 삭제하기 위해서다. 기본 키가 없다면 우리는 데이터의 바다에서 원하는 정보를 특정할 없다. 따라서 모든 테이블에는 기본 키를 설정하는 것이 원칙이다.

 

실무 이야기

실무에서는 보통 id 라는 이름의 열을 만들고, 1부터 시작하여 데이터가 추가될 때마다 1 자동으로 증가하는 정수(Integer) 값을 기본 키 사용하는 경우가 가장 흔하다. 고객 테이블은 customer_id, 상품 테이블은 product_id 와 같이 테이블명_id 형식으로 이름을 짓는 것이 일반적인 관례다.

 

핵심 개념 2: 외래 (Foreign Key) - 따로 떨어진 표들을 '관계' 묶는 방법

문제 상황: 쪼개진 표들을 어떻게 연결할까?

Customers 테이블 나쁜 예시
Order 테이블 나쁜 예시

데이터 중복을 피하기 위해, 우리는 정보를 '고객'과 '주문'이라는 두 개의 테이블로 나누어 저장하기로 했다. 이제 고객 정보는 customers 테이블에 번만 저장되므로, 이순신 고객이 100번을 주문해도 그의 정보는 중복해서 저장되지 않는다. 주소가 바뀌면 customers 테이블의 해당 곳만 수정하면 되므로 데이터 불일치 문제도 해결된다. 단 여기서 문제가 생기는데, 테이블이 완전히 따로 떨어져 있기 때문에, 어떤 주문이 어떤 고객에 의해 이루어졌는지 연결할 방법이 보이지 않는다.

 

Customers 테이블 좋은 예시
Order 테이블 좋은 예시
부모 - 자식 테이블

해결: 관계의 고리, 외래 (Foreign Key)

문제를 해결하는 것이 바로 관계형 데이터베이스의 핵심이자 꽃이라 불리는 외래 (Foreign Key, 줄여서 FK). 아이디어는 놀랍도록 간단하다. 외래 키란, 테이블(A) (Column) 다른 테이블(B) 기본 (Primary Key) 값을 참조하는 말한다.

, orders 테이블에 ' 주문은 어떤 고객의 것인가?' 알려주는 정보를 추가하면 된다. 이때 customers 테이블의 기본 키인customer_id를 orders 테이블에 가져와 사용하는 것이다.

이제 orders 테이블을 보자. 1001 번 주문의 customer_id 는 1 이다. 이 1 이라는 값을 가지고 customers 이블로 가보면, customer_id  1  고객이 '이순신'이라는 것을 바로 있다. 이처럼 다른 테이블의 기본 키를 참조하는 orders 테이블의 customer_id , 이것이 바로 외래 . 외래 키는 두 테이블을 연결하는 '관계의 고리' 역할을 한다. 별것 아닌 같지만, 관계형 데이터베이스의 모든 강력함이 바로 이 지점에서 나온다.

 

부모와 자식의 관계

  • 두 테이블이 FK 값을 통해 관계가 있을 때 한쪽을 부모, 한쪽을 자식이라 한다.
  • 자식 테이블은 FK 값을 통해 부모 테이블을 참조한다. FK 값을 가진 곳이 자식 테이블이다.
  • 여기서는 orders 테이블이 FK 값인 customer_id를 통해 customers 테이블을 참조한다.
    • 따라서 둘의 관계에서 orders 자식 테이블이고, customers 부모 테이블이 된다.

외래 키의 중요한 규칙

  • 참조 무결성(Referential Integrity): 외래 키 열에 있는 값은, 반드시 부모 테이블(참조 당하는 쪽, 여기서는 customers )의 기본 키 값 중 하나이거나, 혹은 비어있어야(NULL) 한다. 예를 들어, orders 테이블의 customer_id customers 테이블에 존재하지도 않는 99 같은 값을 넣으려고 하면 데이터베이스가 "그런 고객은 존재하지 않습니다!"라며 오류를 발생시켜 막아준다. 덕분에 데이터의 정합성이 보장되는 것이다.

외래 키를 사용해 테이블을 연결하는가?

  • 데이터의 중복을 막고, 데이터의 일관성을 유지하며, 논리적으로 분리된 데이터들 사이에 '관계'를 맺어주기 위해서다. 이를 통해 우리는 작고 관리하기 쉬운 여러 개의 테이블로 전체 시스템을 구조화할 있다.

 

 

728x90