Courses/데이터베이스

데이터베이스 개론과 실습 (MySQL로 배우는) | Chapter 02: 관계 데이터 모델

noweahct 2025. 1. 16. 10:56

Jul, 2023

 

*** 관계 데이터 모델

수학의 집합 이론에 근거 → 타 모델에 비해 튼튼한 이론적인 토대를 가짐
관계 데이터 모델을 적용한 SQL 언어는 비절차적인 언어: 원하는 데이터를 쉽게 표현할 수 있음
가장 많이 사용되는 관계 데이터 모델 DMBS: Oracle, SQL Server, DB2, MySQL, PostgreSQL, SQLite

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

1-1) 릴레이션

  • 행과 열로 구성된 테이블
  • 관련 용어 
    용어  한글 용어
    relation 릴레이션, 테이블
    relational data model 관계 데이터 모델
    relational database 관계 데이터베이스
    relational algebra 관계대수
    relationship 관계
  • 관계의 두 가지 개념
    1. 릴레이션 내에서 생성되는 관계
    2. 관련 있는 실제 데이터들의 집합으로 구성됨
    3. 릴레이션 간에 생성되는 관계관계 데이터 모델을 다른 데이터 모델과 구분하는 특징이 됨
    4. 한 릴레이션에서 다른 릴레이션으로 식별 가능한 값을 이용하여 연결함

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

  • 릴레이션은 스키마와 인스턴스로 이루어짐
  • 스키마(schema)
    • 관계 데이터베이스의 릴레이션이 어떻게 구성되는지 어떤 정보를 담고 있는지에 대한 기본적인 구조를 정의
    • 테이블의 첫 행(헤더, header)에 나타남
    • 각 데이터의 특징을 나타내는 속성, 자료 타입 등의 정보를 포함
  • 인스턴스(instance): 정의된 스키마에 따라 테이블에 실제로 저장되는 데이터의 집합

릴레이션 스키마

  • 릴레이션 스키마: 릴레이션에 어떤 정보가 담길지를 정의
  • 용어:
    • 속성(attribute): 릴레이션 스키마의 열
    • 도메인(domain): 속성이 가질 수 있는 값의 집합(속성 이름만으로 어떤 형태의 자료가 있는지 알 수 없어서 필요함)
    • 차수(degree): 속성의 개수
  • 관계 데이터베이스 스키마는 여러 릴레이션 스키마들의 집합으로 구성됨

릴레이션 인스턴스

  • 릴레이션 인스턴스: 릴레이션 스키마에 실제로 저장된 데이터의 집합
  • 투플(tuple): 릴레이션의 행(릴레이션 인스턴스의 각각의 행)
    • 투플의 속성 값은 릴레이션 스키마에서 정의한 도메인 값으로 구성됨
    • 투플이 가지는 속성의 개수는 릴레이션 스키마의 차수와 동일함
    • 릴레이션 내의 모든 투플들은 서로 중복되지 않아야 함
  • 카디날리티(cardinality): 릴레이션에 저장된 투플의 수
    • 투플의 삽입, 삭제, 수정 등에 따라 카디날리티는 수시로 변함

릴레이션 구조와 연관된 용어

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

1-3) 릴레이션의 특징

: 대부분의 정의가 수학적 표현법을 따라, 논리적인 흐름이 명쾌함

  1. 속성은 단일 값을 가진다
    • 여러 개의 값을 가지면, 투플을 하나 더 만들어 속성의 값이 단일 값이 되도록 나누어야 한다
  2. 속성은 서로 다른 이름을 가진다
  3. 한 속성의 값은 모두 같은 도메인 값을 가진다
  4. 속성의 순서는 상관없다
    • 속성의 순서가 달라도 릴레이션 스키마는 같다
  5. 릴레이션 내의 중복된 투플은 허용하지 않는다
  6. 투플의 순서는 상관없다
릴레이션 생성 및 변경에 관한 SQL명령어
CREATE TABLE : 데이터를 저장하기 위한 테이블의 구조를 정의
INSERT : 생성된 테이블에 데이터
DELETE : 테이블에 저장된 테이블을 삭제
UPDATE : 테이블에 저장된 데이터를 수정
SELECT : 테이블에 저장된 테이블을 검색

1-4) 관계 데이터 모델

  • 데이터를 2차원 테이블 형태인 릴레이션으로 표현한다
  • 릴레이션에 대한 제약조건(constraints)과 관계 연산을 위한 관계대수(relational algebra)를 정의한다
    • 제약조건: 각 릴레이션에 저장된 데이터 값이 가져야하는 제약
    • 관계연산: 릴레이션을 다루는 연산 규칙
  • 관계 데이터베이스 시스템: 관계 데이터 모델을 컴퓨터 시스템에 구현한 것
    • SQL을 기반으로 구현된다: 릴레이션의 생성과 관리를 SQL로 수행, 릴레이션에 대한 제약조건을 SQL로 표현, 릴레이션에서 데이터를 추출하는 연산을 SQL로 표현

02. 무결성 제약조건

2-1) 키

  • 키(key): 릴레이션에서 특정 투플을 식별할 때 사용하는 속성 혹은 속성의 집합
  • → 키가 되는 속성은 반드시 값이 달라서 특정 투플들을 서로 구별할 수 있어야 한다
  • 릴레이션 간의 관계를 맺는 데도 사용
  • → 각 릴레이션의 투플을 유일하게 식별하는 장치이면서 각 릴레이션 간의 관계를 말해주는 연결고리

키의 종류

  • 슈퍼키(super key): 투플을 유일하게 식별할 수 있는 하나의 속성 혹은 속성의 집합
  • 후보키(candidate key): 투플을 유일하게 식별할 수 있는 속성의 최소 집합
  • 복합키(composite key): 두 개의 속성으로 이루어진 키
  • 기본키(primary key): 후보키 중 하나를 선정하여 대표로 삼은 키
    • 기본키 선정 시 고려사항
      1. 릴레이션 내 투플을 식별할 수 있는 고유한 값을 가져야 함
      2. NULL 값은 허용하지 않음
      3. 키 값의 변동이 없어야 함
      4. 최대한 적은 수의 속성을 가진 것이어야 함
      5. 향후 키를 사용하는 데 있어서 문제 발생 소지가 없어야 함
  • 대리키(surrogate key): 기본키가 보안을 요하거나, 여러 개의 속성으로 구성되어 복잡하거나, 마땅한 기본키가 없을 때 일련번호 같은 가상의 속성을 만들어 기본키로 삼은 경우(=인조키, artificial key)
  • 대체키(alternative key): 기본키로 선정되지 않은 후보키
  • 외래키(FK, foreign key): 다른 릴레이션의 기본키를 참조하는 속성
    • 릴레이션 간의 관계를 표현한다
    • 외래키 제약조건
      1. 참조하고 참조되는 양쪽 릴레이션의 도메인이 서로 같아야 한다
      2. 참조되는 릴레이션의 기본키 값이 변경되면 이 기본키를 참조하는 외래키 값도 변경되어야 한다(데이터의 일관성을 유지해야 한다)
    • NULL 값과 중복값을 허용
    • 참조하는 릴레이션과 참조되는 릴레이션이 꼭 다른 릴레이션일 필요는 없음
    • 자기 자신의 기본키 참조 가능
    • 외래키가 기본키의 일부가 될 수 있음

*** 키의 포함 관계

2-2) 무결성 제약조건

  • 데이터 무결성: 데이터베이스에 저장된 데이터의 일관성과 정확성을 지키는 것
  • → 무결성을 유지하기 위해서는 투플의 삽입, 삭제, 수정 시 데이터의 제약조건 준수 여부를 확인해야 함
  • 무결성 제약조건의 종류
  도메인 
구분 도메인 무결성 제약조건(domain integrity constraint) 개체 무결성 제약조건(entity integrity constraint) 참조 무결성 제약조건(referentail integrity constraint)
정의 릴레이션 내의 투플들이 각 속성의 도메인에 지정된 값을 가져야 한다는 조건 릴레이션은 기본키를 지정하고, 그에 따른 무결성 원칙(기본키는 NULL 값을 가져서는 안되고 릴레이션 내에 오직 하나의 값만 존재해야 함) 릴레이션 간의 참조 관계를 선언하는 제약조건: 자식 릴레이션의 외래키는 부모 릴레이션의 기본키와 도메인이 동일해야 하고, 자식 릴레이션의 값이 변경될 때 부모 릴레이션의 제약을 받는다
제약 대상 속성 투플 속성과 투플
같은 용어 도메인 제약 기본키 제약 외래키 제약
해당되는 키 - 기본키 외래키
NULL 값 허용 여부 허용 불가 허용
릴레이션 내 제약조건의 개수 속성의 개수와 동일 1개 0개 ~ 여러 개
기타 투플 삽입/수정 시 제약사항 우선 확인 투플 삽입/수정 시 제약사항 우선 확인 (부모 릴레이션의) 투플 삽입/수정 시 제약사항 우선 확인

*** 부모 릴레이션: 참조되는(제공하는) 릴레이션, 자식 릴레이션: 참조하는(제공받는) 릴레이션

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

  • 데이터의 변경이 있을 때마다 제약조건의 준수 여부를 확인해야 한다
  • 개체 무결성 제약조건의 준수 여부 확인 = 기본키 값이 유일한지, NULL 값이 아닌지 검사
  • 참조 무결성 제약조건의 옵션
    명령어 의미
    RESTRICTED 자식 릴레이션에서 참고하고 있을 경우, 부모 릴레이션의 삭제 작업을 거부함
    CASCADE 자식 릴레이션의 관련 투플을 같이 삭제함
    DEFAULT 자식 릴레이션의 관련 투플을 미리 설정해둔 값으로 변경함
    NULL 자식 릴레이션의 관련 투플을 NULL 값으로 설정함(NULL 값을 허가한 경우에)

03. 관계대수

  • 관계대수와 관계해석은 관계 데이터 모델을 사용하는데 필요한 언어
  • 관계대수: 어떤 데이터를 어떻게 찾는지에 대한 처리 절차를 명시하는 절차적인 언어
  • 관계해석: 어떤 데이터를 찾는지만 명시한 선언적인 언어

3-1) 관계대수

  • 관계대수(relational algebra): 릴레이션에서 원하는 결과를 얻기 위해 수학의 대수와 같은 연산을 이용하여 질의하는 방법을 기술하는 언어
  • 관계대수는 절차적인 언어: 하나 이상의 릴레이션에 연산을 수행하여 결과 릴레이션이 나오기까지의 절차를 확인할 수 있게 함

관계대수 연산자

  • 순수 관계 연산: 셀렉션, 프로젝션, 조인, 디비전, 개명
  • 일반 집합 연산: 합집합, 차집합, 교집합, 카티전 프로덕트

관계대수식

  • 관계대수식(relational algebra expression): 관계대수 연산을 수행하기 위한 식
  • 대상이 되는 릴레이션과 연산자로 구성됨
  • 괄호 안의 식이 우선하며, 왼쪽에서 오른쪽으로 계산함
  • 종류
    1. 단항 연산자: 연산자<조건> 릴레이션
    2. 이항 연산자: 릴레이션1 연산자<조건> 릴레이션2
  • 관계대수식의 결과는 릴레이션으로 반환됨
  • 반환된 릴레이션은 릴레이션의 모든 특징을 따름( = 중복된 투플이 존재하지 않고, 중복된 투플이 있을 경우 하나만 표시)
  • 예시

3-2) 셀렉션과 프로젝션

  1. 셀렉션(selection)
    • 릴레이션의 투플을 추출하기 위한 연산
    • 찾고자 하는 투플의 조건을 명시하고 그 조건에 만족하는 투플을 반환
    • 결과 릴레이션의 차수는 대상 릴레이션과 동일함
    • 카디날리티는 대상 릴레이션보다 작거나 같음
  2. 프로젝션(projection)
    • 릴레이션의 속성을 추출하기 위한 연산
    • 결과 릴레이션의 차수는 대상 릴레이션의
    • 카디날리티는 대상 릴레이션과 동일함

3-3) 집합 연산

  • 기본 연산자: 합집합, 차집합, 카티전 프로덕트
  • (기본 연산자로 정의가 가능한) 유도된 연산자: 교집합
  • 합병가능(union compatible): 카티전 프로덕트를 제외한 합집합, 교집합, 차집합은 두 릴레이션의 차수 및 도메인과 속성의 순서가 동일해야 한다
  • → 관계대수의 집합 연산은 합병가능해야 성립된다
  • 수직적 연산: 합집합, 교집합, 차집합
  • 수평적 연산: 카티전 프로덕트
  1. 합집합: 두 개의 릴레이션을 합하여 하나의 릴레이션을 반환
    • 반환되는 결과는 첫 번째 릴레이션의 속성 이름을 가짐
  2. 교집합: 두 릴레이션이 공통으로 가지고 있는 투플을 반환
  3. 차집합: 첫 번째 릴레이션에는 속하고 두 번째 릴레이션에는 속하지 않는 투플을 반환
  4. 카티전 프로덕트: 두 릴레이션을 연결시켜 하나로 합칠 때 사용
    • 결과 릴레이션은 첫 번째 릴레이션의 오른쪽에 두 번째 릴레이션의 모든 투플을 순서대로 배열하여 반환
    • 속성과 도메인이 동일할 필요는 없음
    • 수평적 연산이기 때문에 결과가 의미가 없어 유용성이 떨어지지만, 셀렉션과 프로젝션 연산을 조합하여 사용하면 유용하게 사용할 수 있음

3-4) 조인

  • 두 릴레이션의 공통 속성을 기준으로 속성 값이 같은 투플을 수평으로 결합하는 연산
  • 두 릴레이션을 카티전 프로덕트 연산을 한 후 셀렉션 연산을 한 것
  • 두 릴레이션의 조인에 참여하는 속성이 서로 동일한 도메인으로 구성되어야 함
  • 공통 속성의 속성 값이 동일한 투플만을 결과로 반환
  • 구분
    • 기본 조인 연산: 세타조인, 동등조인, 자연조인
    • 확장된 조인 연산: 세미조인, 외부조인
  • 종류
    1. 세타조인: 두 릴레이션 간의 속성 값을 비교하여 조건에 맞는 투플을 반환
    2. 동등조인: 속성 값이 같은 투플만을 반환(세타조인에서 = 연산자를 사용한 조인)
      • 보통 조인 연산이라고 하면 동등조인을 지칭함
      • 결과 릴레이션 차수 = 첫 번째와 두 번째 릴레이션의 차수를 합한 것
      • 두 릴레이션의 속성 이름을 그대로 사용
    3. 자연조인: 속성 이름이 같은 투플만을 대상으로 하되 중복 속성을 제거하고 반환
      • 결과 릴레이션의 차수 = 두 릴레이션의 차수의 합 - 1
    4. 세미조인: 두 릴레이션을 조인한 후 한 릴레이션의 투플만 반환
    5. 외부조인: 자연조인에 실패한 값들을 NULL 값으로 채워서 반환(자연조인의 확장된 형태)

3-5) 디비전

  • 다른 연산과 달리 릴레이션의 속성 값의 집합으로 연산을 수행
  • 특정 값들을 모두 갖고 있는 투플을 찾을 때 사용