[DB] 관계 데이터 모델

이현경·2026년 3월 14일

Database

목록 보기
2/13

1. 관계 데이터 모델의 개념

1-1. 릴레이션의 개념

  • 관계 데이터 모델의 기본 개념
    • 개념적 구조를 논리적 구조로 표현하는 논리적 데이터 모델
    • 하나의 개체에 관한 데이터를 하나의 릴레이션에 저장
  • 관계(relation)
    • 릴레이션 내의 관계: 릴레이션 안에 있는 데이터들의 집합으로 표현
    • 릴레이션 간의 관계: 릴레이션을 식별 가능한 값을 이용해 표현

  • 릴레이션(relation)
    • 행과 열로 구성된 테이블
    • 하나의 개체에 관한 데이터를 2차원 테이블 구조로 저장한 것
    • 파일 관리 시스템 관점에서 파일(file)에 대응
    • 스키마와 인스턴스로 이루어짐
  • 속성(attribute)
    • 릴레이션의 열, 애트리뷰트
    • 파일 관리 시스템 관점에서 필드(field)에 대응
  • 튜플(tuple)
    • 릴레이션의 행
    • 파일 관리 시스템 관점에서 레코드(record)에 대응

1-2. 릴레이션 스키마와 인스턴스

  • 릴레이션 스키마
    • 릴레이션의 논리적 구조
    • 릴레이션의 이름과 릴레이션에 포함된 모든 속성의 이름으로 정의
      • 속성(attribute): 릴레이션 스키마의 열
      • 도메인(domain): 속성이 가질 수 있는 값의 집합
      • 차수(degree): 속성의 개수
    • 특징(정적): 자주 변하지 않음
    • 표기 방법 2가지
      1) 릴레이션 이름(속성1, 속성2, 속성3, …)
      도서(도서번호, 도서이름, 출판사, 가격)
      
      2) 릴레이션 이름(속성1: 도메인1, 속성2: 도메인2, 속성3: 도메인3, …)
      도서(도서번호: integer, 도서이름: char(40), 출판사: char(40), 가격: integer)
  • 릴레이션 인스턴스
    • 릴레이션 스키마에 실제로 저장된 데이터 집합
      • 튜플(tuple): 릴레이션의 행
      • 카디날리티(cardinality): 튜플의 수
    • 특징(동적): 삽입, 추가, 삭제, 수정이 자주 발생

릴레이션 구조와 관련된 용어 정리

릴레이션 용어같은 의미로 통용되는 용어파일 시스템 용어
릴레이션(relation)테이블(table)파일(file)
스키마(schema)내포(intension)헤더(header)
인스턴스(instance)외연(extension)데이터(data)
튜플(tuple)행(row)레코드(record)
속성(attribute)열(column)필드(field)

1-3. 릴레이션의 특징

  1. 속성의 원자성
    • 속성은 원자성(단일값)만을 가진다
      예) 이름 속성: “짱구”(O) / “짱구, 짱아, 흰둥이”(X)
    • 여러 값을 넣고 싶으면 테이블을 분리하거나 속성을 나눈다
  2. 속성의 무순서성
    • 하나의 릴레이션에서 속성 사이의 순서는 무의미하다
  3. 속성의 동일성
    • 각 속성의 정의된 도메인에 속하는 동일한 유형의 값만 가진다
  4. 튜플의 유일성
    • 하나의 릴레이션에는 동일한 튜플이 존재할 수 없다
  5. 튜플의 무순서성
    • 하나의 릴레이션에서 튜플 사이의 순서는 무의미하다

1-4. 관계 데이터 모델

  • 데이터를 2차원 테이블 형태인 릴레이션으로 표현
  • 릴레이션에 대한 제약조건과 관계 연산을 위한 관계대수를 정의
  • 관계 데이터베이스 시스템
    • 관계 데이터 모델을 컴퓨터 시스템에 구현한 것
    • 관계 데이터 모델에 기초하여 SQL을 기반으로 구현




2. 무결성 제약조건

2-1. 키

  • 릴레이션에서 특정 튜플들을 유일하게 구별하는 속성 또는 속성들의 집합
  • 키가 되는 속성(집합)은 반드시 값이 달라서 튜플들을 서로 구별할 수 있어야 함
  • 특성
    • 유일성(uniqueness) : 하나의 릴레이션에서 모든 튜플은 서로 다른 키 값을 가져야 함
    • 최소성(minimality): 꼭 필요한 최소한의 속성들로만 키를 구성함

키의 종류

고객아이디고객이름나이등급직업적립금주소
apple김현준20gold학생1000서울시 구로구 고척로 27
banana정소화25vip간호사2500부천시 원미구 석천로 58
carrot원유선28gold교사4500서울시 영등포구 대림로 73
orange정지영22silver학생0서울시 마포구 토정로 56

  • 슈퍼키(super key)
    • 유일성을 만족하는 속성 또는 속성들의 집합
    • 예) 고객 릴레이션의 슈퍼키: 고객아이디, (고객아이디, 고객이름), (고객아이디, 나이, 등급), (고객아이디, 나이, 등급, 직업) 등
  • 후보키(candidate key)
    • 유일성과 최소성을 만족하는 속성 또는 속성들의 최소 집합
    • 슈퍼키 중에서 불필요한 속성을 제거한 최소 키
    • 예) 고객 릴레이션의 후보키: 고객아이디, (고객아이디, 고객이름), (고객아이디, 나이), (고객아이디, 주소) 등
    • 고객아이디가 유일하므로 이름, 나이는 불필요한 속성이나 후보키 조건은 충족
    • (나이, 등급)은 동명이인이 있다면 신뢰도가 낮으므로 불가
  • 기본키(primary key)
    • 밑줄을 그어 표시
    • 후보키 중에서 기본적으로 사용하기 위해 선택한 키
    • NULL 허용X
    • 예) 고객 릴레이션의 기본키: 고객아이디
  • 대체키(alternate key)
    • 기본키로 선택되지 못한 후보키
    • 예) 고객 릴레이션의 대체키: (고객아이디, 고객이름), (고객아이디, 나이), (고객이름, 주소) 등
  • 대리키(surrogate key, artificial key)
    • 기본키가 보안을 필요로 하거나 여러 개의 속성으로 구성되어 복잡하거나, 마땅한 기본키가 없을 때, 일련번호 같은 가상의 속성을 만들어 기본키로 삼는다.
    • DBMS나 관련 소프트웨어가 임의로 생성
  • 외래키(foreign key)
    • 다른 릴레이션의 기본키를 참조하는 속성 또는 속성들의 집합
    • NULL 가능
    • 릴레이션들 사이의 관계를 표현
      • 참조하는 릴레이션(자식): 외래키를 가진 릴레이션
      • 참조되는 릴레이션(부모): 외래키가 참조하는 기본키를 가진 릴레이션

  • 외래키 속성과 그것이 참조하는 기본키 속성의 이름은 달라도 되지만 도메인은 같아야 한다
  • 참조되는 기본키 값이 변경되면 참조하는 외래키 값도 변경된다
  • NULL 값과 중복값 등이 허용된다
  • 외래키는 기본키의 일부가 될 수 있다

  • 같은 릴레이션의 기본키를 참조하는 외래키도 정의할 수 있다
  • 외래키 속성은 NULL 값을 가질 수도 있다

키의 특성과 종류

특성 유일성: 한 릴레이션에서 모든 튜플은 서로 다른 키 값을 가져야 함
최소성: 꼭 필요한 최소한의 속성들로만 키를 구성
종류 슈퍼키: 유일성을 만족하는 속성 또는 속성들의 집합
후보키: 유일성과 최소성을 만족하는 속성 또는 속성들의 집합
기본키: 후보키 중에서 기본적으로 사용하기 위해 선택한 키
대체키: 기본키로 선택되지 못한 후보키
외래키: 다른 릴레이션의 기본키를 참조하는 속성 또는 속성들의 집합
대리키: 인위적으로 만든 기본키

2-2. 무결성 제약조건

  • 무결성
    • 데이터에 결함이 없는 상태
    • 데이터가 정확하고 유효하게 유지된 상태
  • 데이터의 무결성(data integrity)
    • 데이터의 무결성을 보장하고 일관되고 정확한 상태로 유지하기 위한 규칙
    • 일관성과 정확성을 바탕으로 구축된 데이터베이스가 계속해서 무결성을 유지하려면 튜플의 삽입, 삭제, 수정 시 데이터의 제약조건 준수 여부를 확인해야 함
  • 무결성 제약조건(integrity constraint)
    • 도메인 무결성 제약조건(domain integrity constraint)
      • 도메인 제약: 릴레이션 내의 튜플들이 각 속성의 도메인에 지정된 값만 가져야 한다는 조건
    • 개체 무결성 제약조건(primary key constraint)
      • 기본키 제약: “기본키는 NULL값을 가져서는 안되며 릴레이션 내에 오직 하나의 값만 존재해야 함”을 지켜야 한다는 조건
    • 참조 무결성 제약조건(referential integrity constraint)
      • 외래키 제약: 릴레이션 간의 참조 관계를 선언하는 제약 조건
      • 자식 릴레이션의 외래키는 부모 릴레이션의 기본키와 도메인이 같아야 하며, 자식 릴레이션의 값이 변경될 때 부모 릴레이션의 제약을 받는다
      • 부모에 없는 값을 자식이 참조하면 위반

2-3. 무결성 제약조건의 수행

개체 무결성

  • 개체 무결성 제약 조건 위반 대표 예
    • 기본키가 NULL인 경우
    • 기본키가 중복된 경우
    • 복합키로 만든 기본키의 일부가 NULL일 때
    • 기본키를 가진 행 삭제 시 참조하는 외래키가 있을 때

참조 무결성

  • 참조 무결성 제약조건 위반의 대표 예
    • 참조 중인 부모 키 삭제
    • 참조 중인 부모 키 변경
    • 존재하지 않는 부모 키 참조
  • 부모 릴레이션에서 튜플을 삭제할 때 무결성 제약조건을 수행하기 위한 옵션

  • 해결 방법은 DBMS 설정에 따라 다름
    • RESTRICT / NO ACTION: 삭제 거부(기본 동작)
    • CASCADE: 부모 삭제 시 자식도 함께 삭제
    • SET NULL / SET DEFAULT: 부모 삭제 시 자식의 외래키를 NULL 또는 기본값으로 변경

무결성 제약조건의 정리




3. 관계대수

3-1. 관계대수

  • 릴레이션에서 원하는 결과를 얻기 위해 릴레이션의 처리 과정을 순서대로 기술하는 절차적 언어로, 하나 이상의 릴레이션에 연산을 수행하여 결과 릴레이션이 나오기까지의 절차를 확인하는 방법을 제공
  • 릴레이션을 처리하는 연산자들의 모임
    • 기본 연산자 5개: σ\sigma, π\pi, U, -, x
    • 일반 집합 연산자와 순수 관계 연산자로 분류
  • 폐쇄 특성(closure property)
    • 피연산자도 릴레이션이고 연산의 결과도 릴레이션


3-2. 집합연산

일반 집합 연산자(set operation)

  • 릴레이션이 튜플의 집합이라는 개념을 이용
  • 합집합, 교집합, 차집합은 피연산자인 두 릴레이션이 합병 가능해야 함
  • 합병 가능(union-compatible) 조건
    • 두 릴레이션의 차수가 같아야 함
    • 두 릴레이션에서 서로 대응되는 속성의 도메인이 같아야 함
연산자기호표현의미
합집합R∪S릴레이션 R과 S의 합집합을 반환
교집합R∩S릴레이션 R과 S의 교집합을 반환
차집합-R-S릴레이션 R과 S의 차집합을 반환
카티션 프로덕트xRxS릴레이션 R의 각 튜플과 릴레이션 S의 각 튜플을 모두 연결하여 만든 새로운 튜플을 반환


합집합(union)

  • 합병 가능한 두 릴레이션 R과 S의 합집합: R ∪ S
    • 릴레이션 R에 속하거나 릴레이션 S에 속하는 모든 튜플을 반환
  • 결과 릴레이션의 특성
    • 차수는 릴레이션 R과 S의 차수와 같음
    • 카디널리티는 릴레이션 R과 S의 카디널리티를 더한 것과 같거나 적어짐
  • 교환법칙 성립: R ∪ S = S ∪ R
  • 결합 법칙 성립: (R∪S)∪T = R∪(S∪T)

교집합(intersection)

  • 합병 가능한 두 릴레이션 R과 S의 교집합: R ∩ S
    • 릴레이션 R과 S의 공통으로 속하는 튜플을 반환
  • 결과 릴레이션의 특성
    • 차수는 릴레이션 R과 S의 차수와 같음
    • 카디널리티는 릴레이션 R과 S의 어떤 카디널리티와 같거나 적음
  • 교환법칙 성립: R ∩ S = S ∩ R
  • 결합 법칙 성립: (R∩S)∩T = R∩(S∩T)

차집합(difference)

  • 합병 가능한 두 릴레이션 R과 S의 차집합: R-S
    • 릴레이션 R에는 존재하지만 릴레이션 S에는 존재하지 않는 튜플을 반환
  • 결과 릴레이션의 특성
    • 차수는 릴레이션 R과 S의 차수와 같음
    • R-S의 카디널리티는 릴레이션 R의 카디널리티와 같거나 적음
    • S-R의 카디널리티는 릴레이션 S의 카디널리티와 같거나 적음
  • 교환법칙, 결합법칙 성립하지 않음

카티션 프로덕트(cartesian product)

  • 두 릴레이션 R과 S의 카티션 프로덕트: RxS
    • 릴레이션 R에 속한 각 튜플과 릴레이션 S에 속한 각 튜플을 모두 연결하여 만들어진 새로운 튜플을 반환
  • 결과 릴레이션의 특성
    • 차수는 릴레이션 R과 S의 차수를 더한 것과 같음
    • 카디널리티는 릴레이션 R과 S의 카디널리티를 곱한 것과 같음
  • 교환법칙 성립: RxS = SxR
  • 결합법칙 성립: (RxS)xT = Rx(SxT)

3-3. 셀렉션과 프로젝션

순수 관계 연산자(relational operation)

  • 릴레이션의 구조와 특성을 이용하는 연산자
연산자기호표현의미
셀렉트σσ조건(R)릴레이션 R에서 조건을 만족하는 튜플들을 반환
프로젝트ππ속성리스트(R)릴레이션 R에서 주어진 속성들의 값으로만 구성된 튜플들을 반환
조인R ⋈ S공통 속성을 이용해 릴레이션 R과 S의 튜플들을 연결하여 만든 새로운 튜플들을 반환
디비전÷R ÷ S릴레이션 S의 모든 튜플과 관련이 있는 릴레이션 R의 튜플들을 반환

셀렉트(select)

  • 릴레이션에서 조건을 만족하는 튜플만 추출하기 위한 연산자
  • 수학적 표현: σ<조건식>(R)\sigma_{<조건식>}(R)
  • 데이터 언어적 표현: 릴레이션 where 조건식
  • 조건식
    • 비교식, 프레디킷(predicate)이라고도 함
    • 속성과 상수의 비교나 속성들 간의 비교로 표현
    • 비교 연산자(>, ≥, <, ≤, =, ≠)와 논리 연산자(∧, ∨, ¬)를 이용해 작성
    • 교환법칙 성립

프로젝트(project)

  • 릴레이션의 속성을 추출하기 위한 단항 연산자
  • 수학적 표현: π<속성리스트>(R)\pi_{<속성리스트>}(R)
  • 데이터 언어적 표현: 릴레이션[속성리스트]

예) 마당서점의 도서 중 가격이 8,000원 이하인 도서 이름과 출판사를 보이시오.


3-4. 조인

  • 두 릴레이션의 공통 속성을 기준으로 속성값이 같은 튜플을 수평으로 결합하는 연산으로 기본 연산자의 조합으로 구현할 수 있는 유도된 연산자
  • 표현법: R1 ⋈ R2
  • 기본 조인연산과 확장된 조인연산으로 구분

[기본 조인연산]

세타조인(⋈θ_{θ})

  • 두 릴레이션 간의 속성값을 비교(=, ≠, ≤, ≥, <, >)하여 조건에 맞는 튜플을 반환함
  • 양쪽 테이블의 공통 컬럼이 모두 결과에 나타남
  • 예) 나이가 25세 이상인 고객이 주문한 사항을 모두 나타내기

고객 ⋈ 고객.고객아이디=주문.고객아이디  고객.나이25_{고객.고객아이디=주문.고객아이디\space∧\space고객.나이 ≥25} 주문


동등조인(⋈R=S_{R=S})

  • 세타 조인 중에서 비교 연산자가 ‘=’(같다)인 경우로 가장 많이 쓰임
  • 양쪽 테이블의 공통 컬럼이 모두 결과에 나타남
  • 예) 고객이 주문한 사항을 모두 나타내기

고객 ⋈ 고객.고객아이디=주문.고객아이디_{고객.고객아이디=주문.고객아이디} 주문


자연조인(⋈N_{N})

  • 동등조건에서 중복되는 조인 컬럼을 하나 제거하여 더 깔끔하게 보여주는 조인
  • 예) 고객과 고객의 주문사항을 보여주되 같은 속성은 한 번만 표시할 때

고객 ⋈ N고객.고객아이디=주문.고객아이디_{N고객.고객아이디=주문.고객아이디} 주문


[확장된 조인연산]

외부조인

  • 자연 조인에서 조인 조건에 맞지 않아 제외되는 튜플도 버리지 않고 NULL을 채워 반환
  • 분류
    • 왼쪽 외부 조인
      • 표현법: R1 ⟕ R2
      • 왼쪽에 있는 R1에 존재하는 모든 튜플을 결과 릴레이션에 포함시킴
    • 오른쪽 외부 조인
      • 표현법: R1 ⟖ R2
      • 오른쪽에 있는 R2에 존재하는 모든 튜플을 결과 릴레이션에 포함시킴
    • 완전(full) 외부 조인
      • 표현법: R1 ⟗ R2
      • 양쪽에 존재하는 모든 튜플을 결과 릴레이션에 포함시킴

세미조인

  • 자연조인을 한 후 두 릴레이션 중 한 쪽 릴레이션의 결과만 반환함
  • 표현법: R1 ⋉ R2
  • 동작방식
    • R1 ⋉ R2 = R1 ⋈N π조인속성_{N}\space\pi_{조인속성}(R2)
    • R2를 조인 속성으로 프로젝트 연산한 후, R1에 자연 조인하여 결과 릴레이션을 구성
  • 특성
    • 불필요한 속성을 미리 제거하여 조인 연산 비용을 줄이는 장점이 있음
    • 교환법칙 성립x: R ⋉ S ≠ S ⋉ R
  • 예) 주문한 적이 있는 고객의 데이터만 보이기

조인 정리

  • 세타/동등/자연조인: 공통 조건 만족하는 행만 반환
    • 세타 조인: 일반적인 비교연산자 사용
    • 동등 조인: 세타조인 중 = 연산자
    • 자연 조인: 중복속성 제거
  • 외부 조인: 조건 불만족 시에도 한쪽 테이블 행 포함(NULL 채움)
  • 세미 조인: 한쪽 테이블 행만 반환, 다른 테이블 속성은 제외

3-5. 디비전

  • 다른 연산과 달리 릴레이션 속성값의 집합으로 연산을 수행함
  • R2의 모든 튜플과 관련이 있는 R1의 튜플을 추출하는 연산
  • 특정 조건을 모두 충족하는 대상을 찾을 때 사용
  • 표현법: R1 ÷ R2
    • R1이 R2의 모든 속성을 포함하고 있어야 함
    • 곱셈의 역연산과 유사 - ex. 12÷2 = (6x2)÷2 = 6
  • 예1) 릴레이션 R과 S에 대한 두 가지 디비전 연산

  • 예2) 전공 필수 과목을 모두 수강한 학생은 누구인가?
    • 수강과목 릴레이션(StudentCourse): 학생이 실제로 수강한 과목들
    • 전공필수과목 릴레이션(RequiredCourses): 반드시 들어야 하는 과목들
    • 조인을 사용할 때: StudentCourse ⋈ RequiredCourses
      • 의미: 학생이 수강한 과목 중 필수 과목과 겹치는 것을 보여줌
      • 결과: 필수 과목의 일부를 수강한 학생들도 나옴
    • 디비전을 사용할 때: StudentCourse ÷ RequiredCourses
      • 의미: 학생이 필수 과목 전체를 모두 수강했는지 확인
      • 결과: 모든 필수 과목을 빠짐없이 수강한 학생만 반환됨
profile
커피 한 잔의 여유를 아는 품격있는 여자

0개의 댓글