반응형
관계형 데이터베이스 구조
- 관계형 모델
- 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에 표현된 요소에 대해서만 선택적으로 적용한다.
- 개체 집합 : 개체 집합은 릴레이션으로 변환. 개체 집합의 키 속성 중 하나를 릴레이션의 기본키로 지정
- 약한 개체 집합 : 약한 개체 집합을 릴레이션으로 변환할 경우 지배 개체인 강한 개체의 키 속성을 포함시킨다. 변환된 릴레이션의 기본키는 강한 개체 집합의 키와 약한 개체 집합 부분의 키를 묶어서 지정한다.
- 일대일 관계 : 일대일의 사상수를 가지는 이항 관계는, 관계 집합에 참여하는 두 릴레이션 중 어느 하나를 다른 릴레이션의 기본키를 참조하는 외래키 컬럼으로 변환한다.
- 일대다 혹은 다대일 관계 : 일대다 이항관계는 '다' 쪽 릴레이션의 외래키 컬럼으로 변환, '일' 쪽의 기본키를 참조하도록 외래키를 지정
- 다대다 관계 : 다대다 이항관계는 별도의 릴레이션, 즉 관계 릴레이션을 별도로 생성하고, 관계에 참여하는 두 릴레이션의 기본키를 각각 참조하는 외래키로 복합키 형태의 컬럼을 구성
- 다중값 속성 : 기존 릴레이션의 기본키와 다중값 속성을 별도의 릴레이션으로 구성하고, 이 둘을 새로운 릴레이션의 기본키로 지정
- 관계 집합의 속성 : 각각의 속성을 외래키가 위치한 릴레이션의 컬럼으로 삽입
- 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단계 연산 과정이 이루어진다.
- R과 S에 대한 카티션 프로덕트 생성
- R과 S에 동일한 이름의 컬럼의 값이 같은 레코드만 선택
- 중복되는 컬럼을 한 번만 표현한 결과를 반환
할당 연산자
- 기호 ←로 나타내며, 관계 대수식의 결과를 임시적으로 릴레이션 변수에 저장시킨다.
- 특정 릴레이션 변수로 할당된 중간 생성물은 다른 관계 대수식에서 마치 하나의 릴레이션처럼 사용될 수 있다.
- ← 오른쪽 관계 대수식의 결과를 ← 왼쪽의 릴레이션 변수에 임시적으로 저장할 뿐, 특별히 릴레이션을 반환하진 않는다.
집계 함수 연산
- 특정 릴레이션에 대해 여러 통계학 수치를 필요로 할 때 사용
- caligraph G 기호로 표기한다. (기호 못찾아서 일단 G로 표시)
- 집계 함수는 집계를 통하여 얻은 수치를 릴레이션에 포함시키는 역할을 한다.
- 중복된 값을 제거하기 위해서는 "-distinct"라는 키워드를 집계 함수 이름 뒤에 붙여서 사용
- count(*)의 '*'은 모든 컬럼을 의미한다.
집계 함수 이름 | 역할 |
sum | 값의 총합을 반환 |
avg | 값의 평균값을 반환 |
count | 집합을 구성하는 원소들의 개수를 반환 |
max | 집합 내 가장 큰 값 반환 |
min | 집합 내 가장 작은 값 반환 |
반응형