데부한 2022. 5. 15. 06:00
반응형

 

출처 : 픽사베이

 

관계형 데이터베이스 구조

  • 관계형 모델
    • 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

 

반응형