---
title: "데이터를 표로 보는 것 이상의 약속: 관계형 모델"
author: "Lee"
published_at: "2026-10-16T14:21:02.834Z"
updated_at: "2026-09-30T09:24:38.376Z"
tags: ["컴퓨터공학","데이터베이스"]
canonical_url: "https://ariser.io/@writer_a1cd615ab19e/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A5%BC-%ED%91%9C%EB%A1%9C-%EB%B3%B4%EB%8A%94-%EA%B2%83-%EC%9D%B4%EC%83%81%EC%9D%98-%EC%95%BD%EC%86%8D-%EA%B4%80%EA%B3%84%ED%98%95-%EB%AA%A8%EB%8D%B8"
ai_assisted: false
---

# 데이터를 표로 보는 것 이상의 약속: 관계형 모델

[원문](https://ariser.io/@writer_a1cd615ab19e/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A5%BC-%ED%91%9C%EB%A1%9C-%EB%B3%B4%EB%8A%94-%EA%B2%83-%EC%9D%B4%EC%83%81%EC%9D%98-%EC%95%BD%EC%86%8D-%EA%B4%80%EA%B3%84%ED%98%95-%EB%AA%A8%EB%8D%B8)

관계형 모델은 데이터를 관계와 그 위의 연산으로 표현하는 데이터 모델이다. 관계는 같은 속성 구조를 가진 튜플들의 집합이며, 속성은 각 항목이 갖는 의미와 값의 영역을 나타낸다. 화면에서 행과 열로 보이는 표는 익숙한 표현 방식이지만, 모델의 핵심은 데이터의 논리 구조와 제약을 물리 저장 방식에서 분리하는 데 있다.

![학생·과목·수강 관계를 각각 표현하고 키로 사실을 연결하는 그림](/api/v1/media/7b079277-12ab-4a01-a245-c9f76c9ae0c2)

*관계는 한 튜플의 의미와 제약을 정하고 필요한 사실을 연산으로 연결한다.*

### 한 행의 의미를 먼저 정한다
학생 관계에 학번, 이름, 학과 속성이 있다고 하자. 튜플 하나는 한 학생에 관한 사실을 표현한다. 스키마는 어떤 속성이 있고 각 속성이 어떤 종류의 값을 가질 수 있는지 정한다. 실제로 저장된 학생들의 모음은 그 스키마를 따르는 현재 데이터다. 스키마가 같아도 학기와 등록 상태에 따라 데이터는 계속 달라질 수 있다.

같은 이름의 학생이 여러 명 있을 수 있으므로 이름만으로 튜플을 식별한다고 가정하면 안 된다. 학번처럼 유일성을 보장하는 키와, 학과 코드가 존재하는 학과를 가리키도록 하는 참조 제약을 정의할 수 있다. 이런 제약은 표를 그리는 모양이 아니라 어떤 데이터 상태를 유효하다고 인정하는지를 정한다.

이론적인 관계는 집합이므로 중복 튜플과 튜플의 고정된 순서를 갖지 않는다. SQL의 쿼리 결과는 기본적으로 중복을 포함할 수 있고, ORDER BY가 없으면 원하는 순서를 보장하지 않는다. 따라서 관계형 이론의 집합 의미와 실제 SQL의 중복 허용 의미를 연결하되 완전히 같다고 생각해서는 안 된다.

### 저장 위치보다 사실의 관계를 다룬다
학생과 과목 사이의 수강 관계를 별도로 두면 한 학생이 여러 과목을 듣고, 한 과목에 여러 학생이 등록하는 구조를 표현할 수 있다. 데이터를 하나의 넓은 행에 모두 넣는 것보다 각 관계가 표현하는 사실을 분명하게 만들 수 있다. 필요한 정보는 조인으로 연결하여 얻는다.

관계형 모델은 데이터를 항상 특정 인덱스나 파일 순서로 저장하도록 요구하지 않는다. 사용자는 조건과 연산으로 원하는 결과를 표현하고, DBMS는 물리적인 접근 방법을 선택할 수 있다. 이 논리적 관점 덕분에 저장 구조를 바꾸어도 많은 쿼리의 의미를 유지할 수 있다. 다만 실제 SQL 기능과 응용 계약을 점검해야 모든 변경이 자동으로 투명해지는 것은 아니다.

NULL은 알 수 없거나 적용되지 않는 값을 나타낼 때 쓰이지만 일반적인 값 하나처럼 비교되지 않는다. SQL은 NULL이 관련된 비교에서 참과 거짓 외에 UNKNOWN을 다룬다. 집합 이론의 단순한 튜플 설명에 NULL 규칙을 그대로 끼워 넣으면 필터와 제약의 실제 동작을 잘못 예상할 수 있다.

예를 들어 학과가 미정인 학생에게 NULL이 들어 있다면 학과='CS'도 학과<>'CS'도 참이 아닐 수 있다. WHERE는 조건이 참인 행을 남기므로 두 쿼리를 합쳤다고 모든 학생이 나오지 않는다. 이 차이는 데이터 모델을 설명할 때 실제 언어의 값 의미도 함께 살펴야 한다는 점을 보여 준다.

좋은 관계 설계는 한 행이 무엇을 뜻하는지, 중복과 유일성을 어떻게 정의하는지, 다른 관계와 어떤 사실로 연결되는지를 먼저 결정한다. 단순한 스프레드시트 표를 DB에 넣었다는 이유로 이런 약속이 생기지는 않는다. 관계형 모델은 데이터 구조를 그리는 방법이면서, 데이터의 의미와 연산을 일관되게 다루기 위한 기반이다.

### 참고 자료

- [CMU 15-445 Relational Model and Algebra](https://15445.courses.cs.cmu.edu/fall2025/notes/01-relationalmodel.pdf)
- [PostgreSQL comparison and NULL semantics](https://www.postgresql.org/docs/current/functions-comparison.html)
