관계형 모델

2022. 5. 15. 06:00·방통대 컴퓨터과학과/3학년1학기
반응형

 

출처 : 픽사베이

 

관계형 데이터베이스 구조

  • 관계형 모델
    • 1969년 코드(Edgar F. Codd) 박사가 제안한 데이터 모델
    • 술어 논리(predicate logic)와 집합론(set theory)을 이론적 배경으로 함
    • 테이블, 컬럼, 기본키-외래키 참조 관계 등으로 현실 관계를 표현
    • 단순하면서도 직관적으로 데이터를 표현할 수 있음
    • 대다수의 상용 DBMS가 관계형 모델을 사용하고 있다.

개요

  • 정보를 수집할 경우 수집된 정보를 체계적으로 저장하기 위해 표(table)라는 2차원의 데이터 구조를 사용한다.
  • 표의 열(column)에는 열에 저장되는 정보의 의미를 담고 있는열 이름을 기록
  • 표의 행(row)에는 열의 순서에 맞춰 일련의 데이터 집합을 입력한다.

릴레이션

  • 관계형 모델 : 어원은 행과 열의 관계로 이루어진 격자 구조의 수학적 개념인 릴레이션에서 유래
  • 릴레이션 내부에서 한 값은 행과 열의 관계(relation)로 결정
  • 행을 레코드(recode) 또는 투플(tuple)이라 한다.
  • 열을 컬럼(column) 또는 필드(field)라고 한다.
  • 각 속성은 도메인(domain)이라는 입력 가능한 값의 범위를 가지고 있다.
  • 릴레이션 스키마(schema)는 컬럼과 각 컬럼의 순서 및 도메인, 릴레이션의 이름을 포함한다.
  • 차수(degree)는 컬럼의 개수를 나타낸다.
  • 카디널리티(cardinality)는 레코드의 개수는 행의 개수를 나타낸다.
  • 릴레이션의 특징
    • 레코드의 유일성 : 하나의 릴레이션에는 중복되는 레코드가 존재할 수 없다. 하나의 키 값으로 하나의 레코드를 유일하게 식별한다.
    • 레코드의 무순서성 : 한 릴레이션에 포함된 레코드는 순서가 정해져 있지 않다.
    • 컬럼의 무순서성 : 한 릴레이션을 구성하는 컬럼 사이에는 순서가 없으며, 이름과 값의 쌍으로 구성된다.
    • 컬럼값의 원자성 : 컬럼은 여러 의미를 갖는 값으로 분해가 불가능하며 원자적(atomic)하다.
  • 키(key) : 컬럼의 부분집합으로 그 릴레이션의 레코드를 유일하게 식별하는 역할을 한다.
  • 키의 특징
    • 유일성(uniqueness) : 키 컬럼 값은 중복될 수 없다. 즉, 한 개의 키 값은 한 레코드에만 해당된다.
    • 최소성(irreducibility) : 2개 이상의 컬럼으로 구성된 키에서 어느 한 컬럼을 제거하면 유일한 식별성이 파괴된다. 즉, 키는 유일성을 유지하기 위한 최소의 컬럼으로만 구성된다.
  • 주속성(prime attribute) : 릴레이션 R의 키 중, 적어도 한 키에 포함되는 컬럼을 릴레이션 R의 주속성이라 한다.
  • 비주속성(non-prime attribute) : 주속성에 포함되지 않은 속성을 말한다.
  • 수퍼키(superkey) : 레코드를 고유하게 구별할 수 있는 컬럼 집합이며 한 개 이상의 컬럼으로 구성될 수 있다. 고로 유일성만 만족하고 최소성을 만족하지 못한다.
  • 후보키(candidate key) : 수퍼키 중에서도 최소한의 컬럼으로 구성된 수퍼키이며 유일성과 최소성을 만족한다.
  • 기본키(PK: Primary key) : DB 설계자가 레코드를 구분하기 위해 지정한 후보키 중 하나
  • 키는 NULL 값을 가질 수 없지만 외래키나 일반 컬럼은 널 값을 가질 수 있다.

릴레이션 스키마

  • 릴레이션 스키마는 테이블에서 사용되는 컬럼과 컬럼이 지니는 데이터 타입을 정의한 것이다.
  • 릴레이션 인스턴스(instance)는 변수에 저장되어 있는 정숫값과 유사하다. 변수의 값이 시간이 지나면서 변할 수 있듯이 릴레이션 인스턴스 또한 시간에 따라 변한다.
  • 테이블에서 컬럼 부분이 스키마라고 할 수 있고, 인스턴스는 행이라고 생각하면 될 것 같다.

관계형 모델의 제약조건

  • 제약 조건 : 데이터의 의미를 보존하고 정확성을 유지하기 위한 일정 조건
  • 릴레이션의 모든 인스턴스들이 만족해야 하는 조건이다.
  • 영역 제약조건(domain constraints)
    • 특정 컬럼이 가질 수 있는 값에 대한 제약조건
    • 컬럼에 해당되는 값이 사전에 정의된 가능한 값의 범위인 영역(domain)에 포함되며 원자적(atomic)이어야 하는 조건
    • ex) 동물 컬럼에 '토마토'가 들어갈 수 없다.
  • 키 제약조건(key constraints)
    • 릴레이션에 저장된 각 레코드를 구별하기 위해 특정 컬럼의 값들이 릴레이션 내부의 레코드를 고유하게 식별할 수 있어야 한다는 조건
  • 개체 무결성 제약조건(entity integrity constraints)
    • 기본키 값으로 널(NULL) 값을 저장할 수 없는 조건
  • 참조 무결성 제약조건(referential integrity constraints)
    • 두 개의 릴레이션 사이에 명시되는 제약조건
    • 두 릴레이션의 레코드 사이에 일관성을 유지하는 데 사용
    • 한 릴레이션에 있는 레코드가 다른 릴레이션에 있는 레코드를 참조하려면 반드시 참조되는 레코드가 해당 릴레이션 내에 있어야 하는 제약조건
    • 참조 무결성 제약조건을 보다 형식적으로 정의하기 위해서는 외래키(FK: Foreign Key)를 정의해야 함
    • 외래키를 사용하기 위해서는 두 릴레이션의 스키마 A와 B 사이의 조건이 있다.
      • A의 외래키 컬럼들은 B의 기본키(PK)의 속성들과 동일한 영역을 가진다.
      • A의 한 레코드의 외래키(FK)는 B의 어떤 컬럼의 기본키(PK)와 일치하거나 NULL 값이어야 한다.
    • 참조 무결성을 만족하기 위해서는 A 릴레이션의 레코드가 삭제 되는 경우 B 릴레이션의 레코드도 같이 삭제되어야 한다.
반응형

 

논리적 데이터 모델링

  • ER 모델은 데이터의 구조와 데이터 간의 관계를 정의한 개념적 데이터 모델이라 상용 DBMS에 바로 적용하기 어렵다.
  • 그래서 개념적 데이터 모델을 상용 DBMS에 맞는 논리적 데이터 모델로 변환하는 작업이 필요함
  • 논리적 데이터 모델은 대표적으로 관계형 데이터 모델이 이용된다.

ER 다이어그램의 관계형 모델 변환

  • ERD에 포함된 개체 집합과 관계 집합 등 표현된 모든 내용을 관계형 모델의 릴레이션으로 변환하는 작업 필요
  • ER 모델에서 속성은 릴레이션의 컬럼, 개체 집합 = 릴레이션, 개체 = 레코드
  • ERD의 모든 표현은 의미 훼손 없이 관계형 모델의 스키마로 변환되어야 한다.
  • 일정한 단계에 따라 순차적으로 적용하는데, ERD에 표현된 요소에 대해서만 선택적으로 적용한다.
  1. 개체 집합 : 개체 집합은 릴레이션으로 변환. 개체 집합의 키 속성 중 하나를 릴레이션의 기본키로 지정
  2. 약한 개체 집합 : 약한 개체 집합을 릴레이션으로 변환할 경우 지배 개체인 강한 개체의 키 속성을 포함시킨다. 변환된 릴레이션의 기본키는 강한 개체 집합의 키와 약한 개체 집합 부분의 키를 묶어서 지정한다.
  3. 일대일 관계 : 일대일의 사상수를 가지는 이항 관계는, 관계 집합에 참여하는 두 릴레이션 중 어느 하나를 다른 릴레이션의 기본키를 참조하는 외래키 컬럼으로 변환한다.
  4. 일대다 혹은 다대일 관계 : 일대다 이항관계는 '다' 쪽 릴레이션의 외래키 컬럼으로 변환, '일' 쪽의 기본키를 참조하도록 외래키를 지정
  5. 다대다 관계 : 다대다 이항관계는 별도의 릴레이션, 즉 관계 릴레이션을 별도로 생성하고, 관계에 참여하는 두 릴레이션의 기본키를 각각 참조하는 외래키로 복합키 형태의 컬럼을 구성
  6. 다중값 속성 : 기존 릴레이션의 기본키와 다중값 속성을 별도의 릴레이션으로 구성하고, 이 둘을 새로운 릴레이션의 기본키로 지정
  7. 관계 집합의 속성 : 각각의 속성을 외래키가 위치한 릴레이션의 컬럼으로 삽입
  8. n항 관계 : n개 이상의 개체 집합이 참여한 관계의 경우, 관계에 참여하는 n개의 릴레이션의 키들로 구성되는 관계 릴레이션으로 변환. 관계 릴레이션의 컬럼들은 참여 릴레이션의 기본키를 참조하는 외래키와 관계 컬럼으로 구성
반응형

 

데이터 조작

  • 관계형 모델을 기반으로 구성된 릴레이션을 사용하여 새로운 릴레이션을 생성하는 표현
  • 사용자 관점에서 필요한 데이터를 릴레이션에서 추출하는 방법을 제공하는 도구
  • 관계형 모델은 스키마로부터 특정 데이터를 추출하는 데이터 연산 방법을 관계 대수를 통해 제공함

관계 대수의 이해

  • 관계 연산을 정의하는 방법
    • 주어진 릴레이션에서 필요한 릴레이션을 만드는 연산자로 구성
    • 관계 대수 연ㅅ나자는 새로운 임시 릴레이션을 생성
    • 연산자를 중첩하여 연산 처리 절차를 표현
  • 관계 대수 : 질의에 대한 처리 과정을 단계적으로 표현할 수 있는 절차적 언어
  • DBMS는 주어진 SQL에 대한 실행 계획 또는 처리 절차를 나타내기 위해 관계 대수를 DBMS 실행 엔진의 내부 언어로 사용함
  • 모두 1개 이상의 릴레이션을 입력으로 받아 새로운 릴레이션을 생성하는 폐쇄적 특성을 갖추고 있어 여러 연산자를 중첩하여 하나의 완전한 관계 대수식을 구성

기본 연산자

  • 단항 연산자 : 셀렉트, 프로젝트, 리네임 연산자
  • 이항 연산자 : 합집합, 차집합, 카티션 프로덕트 연산자

셀렉트(select)

  • 릴레이션에서 조건을 만족하는 레코드들을 선택
  • 시그마(σ) 기호로 표현
  • 조건은 아래첨자 형태로 작성

구문 형식

  • 검색 조건에 =, ≠, >, ≥, <, ≤ 관계 연산자를 사용할 수 있다.
  • 두 개 이상의 검색 조건은 논리 접속자 AND(⋀), OR(⋁), NOT(¬)을 이용하여 결합 가능
  • ex) 교수 테이블에서 컴퓨터과학과에 소속되고, 연봉이 5,000만원 이상인 교수의 연산식

프로젝트(project)

  • 릴레이션의 특정 컬럼이 필요한 경우에 사용
  • 단항 연산자로 입력된 릴레이션의 특정 컬럼만 추출하여 새로운 릴레이션으로 재구성
  • 대문자 파이(⫪) 기호로 표현
  • 결과에 포함시키고자 하는 컬럼은 파이 뒤에 아래첨자로 나열

구문 형식

  • 주의할 점은 R에 존재하는 컬럼을 넣어야하며, 그렇지 않을 경우에 에러가 발생한다.
  • 컬럼은 콤마로 구분한다.

집합 연산자

  • 관계형 모델은 집합론을 이론적 배경으로 하기 때문에 집합 연산자인 합집합, 교집합, 차집합 연산자를 적용할 수 있다.
  • 이때 릴레이션은 집합, 각 레코드는 집합에 포함된 원소라고 할 수 있다.
  • 호환 가능한 릴레이션간에만 사용할 수 있다.
  • 집합 연산자를 사용하기 위한 두 가지 조건
    • 릴레이션 A와 B는 가지고 있는 컬럼의 수가 같아야 한다.
    • 모든 i에 대해 릴레이션 A의 i번째 컬럼의 도메인과 릴레이션 B의 i번째 컬럼의 도메인이 서로 같아야 한다.
  • 합집합 연산자
    • 두 릴레이션이 포함된 모든 레코드를 갖는 릴레이션을 결과값으로 가진다.
    • 합집합 연산으로 나타낸 질의문의 결과에서 유의할 점은 양쪽 릴레이션에 존재하는 중복된 레코드는 관계형 모델의 특징인 '레코드 유일성'에 의해 한 번만 표현된다.
    • 기호는 ∪이다.
  • 차집합 연산자
    • 기호는 −이다.
    • 한 릴레이션에는 포함되지만 다른 릴레이션에는 포함되지 않는 레코드를 가지는 릴레이션을 결과로 반환한다.
  • 교집합 연산자
    • 기호는 ∩이다.
    • 양쪽 릴레이션에 동시에 포함되는 레코드의 집합을 생성
    • 양립 가능한 릴레이션 간에 이루어져야 한다.

리네임(rename) 연산자

  • 그리스 소문자 로(ρ)로 표기
  • 관계 대수식에 새로운 이름을 부여하는 연산자
  • 관계 대수식의 경우 결과로 생성된 릴레이션은 참조할 수 있는 이름을 갖고 있지 않기 때문에 결과 릴레이션을 재사용하기 위해 참조할 목적으로 사용한다.

구문 형식

  • 첫 번째 형식은 결과 릴레이션에 대한 이름이고, 두 번째 형식은 릴레이션의 이름과 각 컬럼의 이름까지 새로 명명할 수 있다.

카티션 프로덕트(Cartesian product)

  • 서로 다른 릴레이션 간의 관계성을 이용하는 연산자
  • X로 표시되며 두 릴레이션의 레코드 간에 모든 조건을 취하여 결합한 레코드를 생성한다.
  • RXS의 경우 R에 m개의 컬럼과 a개의 레코드, S에 n개의 컬럼과 b개의 레코드가 존재한다면 연산의 결과로는 m+n개의 컬럼과 aXb개의 레코드가 저장된 릴레이션이 만들어진다.

조인(join)

  • 두 릴레이션으로부터 서로 관련된 레코드만 결합하여 결과 집합에 포함
  • 카티션 프로덕트와 유사하지만 조인 연산은 특정 조건을 만족하는 레코드 조합만 결과에 포함시킨다.
  • ex)

  • 세타 조인
    • 관계연산자 θ로 정의되는 조인 조건을 가진다.
    • ⨝를 기호로 사용한다.
    • θ는 =, ≠, >, ≥, <, ≤ 중 하나이며, θ가 '='인 경우 특별히 동등 조인(이퀴 조인, equi join)이라고 한다.

구문 형식
동등 조인일 경우 간단하게 사용할 수 있다.

반응형

 

확장 연산자

  • 질의 표현 시 자주 이용되는 기본 연산자들의 조합을 압축적으로 표현하는 연산자
  • 기본 연산자가 표현할 수 없는 질의를 표현하기 위한 연산자가 포함

자연 조인 연산자

  • 자연 조인은 동등 조인을 보다 간결하게 표현할 수 있는 연산자
  • R⨝nS에 대해 3단계 연산 과정이 이루어진다.
  1. R과 S에 대한 카티션 프로덕트 생성
  2. R과 S에 동일한 이름의 컬럼의 값이 같은 레코드만 선택
  3. 중복되는 컬럼을 한 번만 표현한 결과를 반환

EX

할당 연산자

  •  기호 ←로 나타내며, 관계 대수식의 결과를 임시적으로 릴레이션 변수에 저장시킨다.
  • 특정 릴레이션 변수로 할당된 중간 생성물은 다른 관계 대수식에서 마치 하나의 릴레이션처럼 사용될 수 있다.
  • ← 오른쪽 관계 대수식의 결과를 ← 왼쪽의 릴레이션 변수에 임시적으로 저장할 뿐, 특별히 릴레이션을 반환하진 않는다.

집계 함수 연산

  • 특정 릴레이션에 대해 여러 통계학 수치를 필요로 할 때 사용
  • caligraph G 기호로 표기한다. (기호 못찾아서 일단 G로 표시)
  • 집계 함수는 집계를 통하여 얻은 수치를 릴레이션에 포함시키는 역할을 한다.
  • 중복된 값을 제거하기 위해서는 "-distinct"라는 키워드를 집계 함수 이름 뒤에 붙여서 사용
  • count(*)의 '*'은 모든 컬럼을 의미한다.
집계 함수 이름 역할
sum 값의 총합을 반환
avg 값의 평균값을 반환
count 집합을 구성하는 원소들의 개수를 반환
max 집합 내 가장 큰 값 반환
min 집합 내 가장 작은 값 반환

구문 형식
ex

 

반응형
저작자표시 비영리 변경금지 (새창열림)
'방통대 컴퓨터과학과/3학년1학기' 카테고리의 다른 글
  • 방통대 운영체제 2012학년도 1학기 기말시험 기출문제 해설 및 설명 - 2
  • 방통대 운영체제 2012학년도 1학기 기말시험 기출문제 해설 및 설명 - 1
  • [운영체제] 스케줄링 알고리즘
  • [C언어] 자료형과 선행처리기
데부한
데부한
어차피 할 거면 긍정적으로 하고 싶은 개발자
    반응형
  • 데부한
    동동이개발바닥
    데부한
  • 전체
    오늘
    어제
    • 분류 전체보기 (307)
      • 방통대 컴퓨터과학과 (27)
        • 잡담 (9)
        • 3학년1학기 (17)
      • 프로젝트 및 컨퍼런스 회고 (1)
        • 프로젝트 (4)
        • 한이음 프로젝트 (0)
        • 회고 (3)
      • 공부 (165)
        • Spring (37)
        • JPA (71)
        • 인프런 워밍업 클럽_BE (10)
        • Java (6)
        • React.js (27)
        • 넥사크로 (11)
        • 기타 (3)
      • 알고리즘 (85)
        • 알고리즘 유형 (10)
        • 알고리즘 풀이 (57)
        • SQL 풀이 (18)
      • 에러 해결 (13)
      • 잡담 (7)
        • 국비교육 (2)
        • 구매후기 (5)
        • 진짜 잡담 (0)
  • 블로그 메뉴

    • Github
    • Linkedin
    • 홈
    • 방명록
    • 글쓰기
    • 관리
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    프로그래머스
    JPA
    react
    RESTful
    기출문제
    자바스크립트
    Spring
    토이프로젝트
    토비의스프링부트
    코딩테스트
    egov
    스프링부트
    넥사크로
    에러해결
    oracle
    Java
    SQL
    전자정부프레임워크
    프론트엔드
    개발자
    운영체제
    QueryDSL
    springboot
    알고리즘
    SpringBoot를 이용한 RESTful Web Service 개발
    방통대
    인프런
    백준
    IT
    MSA
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
데부한
관계형 모델
상단으로

티스토리툴바