-
2. 관계 데이터 모델전공공부/데이터베이스 2019. 12. 31. 18:30728x90반응형
목차
1. 관계 데이터 모델의 개념
2. 무결성 제약조건
3. 관계대수
01. 관계 데이터 모델의 개념
1. 릴레이션
2. 릴레이션 스키마와 인스턴스
3. 릴레이션의 특징
1.1 릴레이션
릴레이션: 행과 열로 구성된 테이블
첫 번째 행 (1, 축구의 역사, 굿스포츠, 7000)의 경우 네 개의 집합에서 각각 원소 한 개씩 선택하여 만들어진것으로 이 원소들이 관계를 맺고 있다.
관계(relationship)
릴레이션 내에서 생성되는 관계: 릴레이션 내 데이터들의 관계
릴레이션 간에 생성되는 관계: 릴레이션 간의 관계
1.2 릴레이션 스키마와 인스턴스
스키마의 요소
속성(attribute): 릴레이션 스키마의 열
도메인(domain): 각각의 속성들이 가질 수 있는 값들의 집합 (예를들면 속성이 길이면 속성 값으로 사용자가 지정한cm,m등 만 들어올 수 있다. 또는 속성이 성별이면 속성 값으로 남, 여만 올 수 있다.)
차수(degree): 속성의 개수
스키마의 표현
릴레이션 이름(속성1; 도메인1, 속성2: 도메인2, 속성3: 도메인3,...)
EX) 도서(도서번호, 도서이름, 출판사, 가격)
인스턴스 요소
튜플(tuple): 릴레이션의 행 -> 튜플이 가지는 속성의 개수는 릴레이션 스키마의 차우와 동일하고, 릴레이션 내의 모든 튜플들은 서로 중복되지 않아야 한다.
카디날리티(cardinality): 튜플의 수
릴레이션 구조와 관련된 용어
릴레이션 용어 같은 의미로 통용되는 용어 파일 시스템 용어 릴레이션 테이블 파일 스키마 내포(intension) 헤더 인스턴스 외연(extension) 데이터 튜플 행 레코드 속성 열 필드 1.3 릴레이션의 특징
속성은 단일 값을 가진다.
각 속성의 값은 도메인에 정의된 값만을 가지며 그 값은 모두 단일 값이여야 한다.
속성은 서로 다른 이름을 가진다.
속성은 한 릴레이션에서 서로 다른 이름을 가져야만 한다.
한 속성의 값은 모두 같은 도메인 값을 가진다.
한 속성에 속한 열은 모두 그 속성에서 정의한 도메인 값만 가질 수 있다.
속성의 순서는 상관없다.
속성의 순서가 달라도 릴레이션 스키마는 같다
예를 들어 릴레이션 스키마에서 (이름, 주소) 순으로 속성을 표시하거나 (주소, 이름) 순으로 표시해도 상관 없다.
릴레이션 내의 중복된 튜플은 허용되지 않는다.
하나의 릴레이션 인스턴스 내에서는 서로 중복된 값을 가질 수 없다. 즉 모든 튜플은 서로 값이 달라야 한다.
튜플의 순서는 상관없다.
튜플의 순서가 달라도 같은 릴레이션이다. 관계 데이터 모델의 튜플은 실제적인 값을 가지고 있으며 이 값은 시간이 지남에 따라 데이터의 삭제, 수정, 삽입에 따라 순서가 달라질 수 있다.
02. 무결성 제약조건
1. 키
2. 무결성 제약조건
3. 무결성 제약조건의 수행
2.1 키
특정 튜플을 식별할 때 사용하는 속성 혹은 속성의 집합
릴레이션은 중복된 튜플을 허용하지 않기 때문에 각각의 튜플에 포함된 속성들 중 어느 하나(혹은 하나 이상) 은 값이 달라져야 한다. 즉 키가 되는 속성(혹은 속성의 집합)은 반드시 값이 달라서 튜플들을 서로 구별할 수 있어야 한다.
키는 릴레이션 간의 관계를 맺는 데에도 사용된다.
슈퍼키
튜플을 유일하게 식별할 수 있는 하나의 속성 혹은 속성의 집합 -> 튜플을 유일하게 식별할 수 있는 값이면 모두 슈퍼키가 될 수 있다.
고객 릴레이션의 예)
고객번호: 고객별로 유일한 값이 부여되어 있기 때문에 튜플을 식별할 수 있음
이름: 동명이인이 있을 경우 튜플을 유일하게 식별할 수 없다.
주민번호: 개인별로 유일한 값이 부여되어 있기 떄문에 튜플을 식별할 수 있다.
주소: 가족끼리는 같은 정보를 사용하므로 튜플을 식별할 수 있다.
핸드폰: 한 사람이 여러 개의 핸드폰을 사용할 수 있고 반대로 핸드폰을 사용하지 않는 사람이 있을 수 있기 때문에 튜플을 식별할 수 없음
따라서 고객 릴레이션은 고객번호와 주민번호를 포함한 모든 속성의 집합이 슈퍼키가 될 수 있다.
ex)
(주민번호), (주민번호, 이름), (주민번호, 이름, 주소), (주민번호, 이름, 핸드폰),
(고객번호), (고객번호, 이름, 주소), (고객번호, 이름, 주민번호, 주소, 핸드폰) 등
후보키
튜플을 유일하게 식별할 수 있는 속성의 최소 집합
따라서 위의 고객 릴레이션을 계속해서 예를 들면 후보키로는 고객번호 또는 주민번호가 될 수 있다.
또한 만약 후보키가 2개 이상의 속성으로 이루어진 키를 복합키라고 한다.
기본키
여러 후보키 중 하나를 선정하여 대표로 삼는 키
후보키가 하나뿐이라면 그 후보키를 기본키로 사용하면 되고 여러 개라면 릴레이션의 특성을 반영하여 하나를 선택하면 된다.
기본키 선정시 고려사항
릴레이션 내 튜플을 식별할 수 있는 고유한 값을 가져야 한다.
NULL값은 허용하지 않는다.
키 값의 변동이 일어나지 않아야 한다.
최대한 적은 수의 속성을 가진 것이어야 한다.
향후 키를 사용하는 데 있어서 문제 발생 소지가 없어야 한다.
릴레이션 스키마를 표현할 때 기본키는 밑줄을 그어 표시
EX) 고객(고객번호, 이름, 주민번호, 주소, 핸드폰)
도서(도서번호, 도서이름, 출판사, 가격)
대리키
기본키가 보안을 요하거나, 여러 개의 속성으로 구성되어 복잡하거나, 마땅한 기본키가 없을 때는 일련번호 같은 가상의 속성을 만들어 기본키로 삼는 경우가 있다. 이러한 키를 대리키 혹은 인조키라고 한다.
대리키는 DBMS나 관련 소프트웨어에서 임의로 생성하는 값으로 사용자가 직관적으로 그 값의 의미를 알 수 없다.
대체키
대체키는 기본키로 선정되지 않은 후보키를 말한다.
고객 릴레이션의 경우 고객번호와 주민번호 중 고객번호를 기본키로 정하면 주민번호가 대체키가 된다.
외래키
다른 릴레이션의 기본키를 참조하는 속성을 말한다. 다른 릴레이션의 기본키를 참조하여 관계 데이터 모델의 특징인 릴레이션 간의 관계를 표현할 수 있다.
외래키의 특징
관계 데이터 모델의 릴레이션 간의 관계를 표현한다.
다른 릴레이션의 기본키를 참조하는 속성이다.
참조하고(외래키) 참조되는(기본키) 양쪽 릴레이션의 도메인은 서로 같아야 한다.
참조되는(기본키) 값이 변경되면 참조하는(외래키) 값도 변경된다.
NULL 값과 중복 값 등이 허용된다.
자기 자신의 기본키를 참조하는 외래키도 가능하다.
외래키가 기본키의 일부가 될 수 있다.
자기 자신의 기본키를 참조하는 외래키도 가능하다. -> 외래키 사용 시 참조하는 릴레이션과 참조되는 릴레이션이 꼭 다른 릴레이션일 필요는 없다. 즉 자기 자신의 기본키를 참조할 수도 있다.
키 요약
2.2 무결성 제약조건
데이터 무결성(integrity)은 데이터베이스에 저장된 데이터의 일관성과 정확성을 지키는 것을 말한다.
도메인 무결성 제약조건
도메인 제약이라고도 하며, 릴레이션 내의 튜플들이 각 속성의 도메인에 지정된 값만을 가져야 한다는 조건이다. SQL문에서 데이터 형식(type), 널(null/not null), 기본 값(default), 체크(check) 등을 사용하여 지정할 수 있다.
개체 무결성 제약조건
기본키 제약이라고도 한다. 릴레이션은 기본키를 지정하고 그에 따른 무결성 원칙 즉, 기본키는 NULL 값을 가져서는 안 되며 릴레이션 내에 오직 하나의 값만 존재해야 한다는 조건이다.
참조 무결성 제약조건
외래키 제약이라고도 하며, 릴레이션 간의 참조 관계를 선언하는 제약조건이다. 자식 릴레이션의 외래키는 부모 릴레이션의 기본키와 도메인이 동일해야 하며, 자식 릴레이션의 값이 변경될 때 부모 릴레이션의 제약을 받는다.
2.3.1 개체 무결성 제약조건
삽입: 기본키 값이 같으면 삽입이 금지된다.
수정: 기본키 값이 같거나 NULL로도 수정이 금지된다.
삭제: 특별한 확인이 필요하지 않으며 즉시 수행한다.
2.3.2 참조 무결성 제약조건
삽입
학과(부모 릴레이션): 튜플 삽입한 후 수행하면 정상적으로 진행된다.
학생(자식 릴레이션): 참조받는 테이블에 외래키 값이 없으면 삽입이 금지된다.
좀 더 자세히 설명하자면
학생 릴레이션에 새로운 투플을 삽입하려고 했을 때 DBMS는 먼저 도메인 무결성 제약조건을 확인한 후 개체 무결성 제약조건에 위배되는 값이 없는지 확인한다. 그리고 나서 학과코드 값이 학과 릴레이션의 기본키에 존재하는지 확인한다. 학생 릴레이션에 투플 (601, 박세리, 3001)을 삽입하려고 했을 때 학번 601은 들어갈 수 있지만 학과코드 3001은 들어갈 수 가 없으므로 수행이 거부된다. 만약 참조하는 학과코드가 NULL값을 허용 했다면 (601, 박세리, NULL) 값을 넣어 수행할 수는 있다.
삭제
학과(부모 릴레이션): 참조하는 테이블을 같이 삭제할 수 있어서 금지하거나 다른 추가 작업이 필요하다.
학생(자식 릴레이션): 바로 삭제 가능하다.
*부모 릴레이션에서 튜플을 삭제할 경우 참조 무결성 조건을 수행하기 위한 고려사항
1. 즉시 작업 중지, 2. 자식 릴레이션의 관련 튜플 삭제, 3. 초기에 설정된 다른 어떤 값으로 변경, 4.NULL값으로 설정
수정
삭제와 삽입 명령이 연속해서 수행됨.
부모 릴레이션의 수정이 일어날 경우 삭제 옵션에 따라 처리된 후 문제가 없으면 다시 삽입 제약 조건에 따라 처리된다.
03. 관계대수
1. 관계대수
2. 셀렉션과 프로젝션
3. 집합연산
4. 조인
5. 디비전
3.1 관계대수
관계대수는 릴레이션에서 원하는 결과를 얻기 위해 수학의 대수와 같은 연산을 이용하여 질의하는 방법을 기술하는 언어
관계대수: 어떤 데이터를 어떻게 찾는지에 대한 처리 절차를 명시하는 절차적인 언어이며, DBMS 내부의 처리 언어로 사용된다.
관계해석: 어떤 데이터를 찾는지만 명시하는 선언적인 언어로 관계대수와 함께 관계 DBMS의 표준 언어인 SQL의 이론적인 기반을 제공함
--> 관계대수와 관계해석은 모두 관계 데이터 모델의 중요한 언어이며 실제 동일한 표현 능력을 가지고 있다.
3.1.1 관계의 수학적 의미
릴레이션의 현실 세계 적용
예) 학번={2,4}, 과목={데이터베이스, 자료구조, 프로그래밍}일 때, 두 집합의 카르티전 프로덕트인 학번X과목은 학번 원소와 과목 원소의 순서쌍의 집합이다. 즉, 학번X과목={(2, 데이터베이스), (2, 자료구조), (2, 프로그래밍), (4, 데이터베이스), (4, 자료구조), (4, 프로그래밍)}을 말한다.
그래서 수강 릴레이션의 {(2, 데이터베이스), (2, 자료구조), (4, 프로그래밍)}은 카티전 프로덕트 학번×과목의 부분집합으로 하나의 릴레이션 인스턴스라고 할 수 있다.
3.1.2 관계대수 연산자
다음과 같은 관계대수 연산자를 통해 관계대수식을 만들 수 있고 릴레이션간의 연산에 적용할 수 있다.
다음은 관계대수를 적용한 식의 사용 예이다.
3.2.1 셀렉션, 3.2.2 프로젝션
셀렉션은 하나의 릴레이션을 대상으로 하는 단항 연산자이며, 찾고자 하는 튜플의 조건을 명시하고 그 조건에 만족하는 튜플을 반환한다.
프로젝션은 릴레이션의 속성을 추출하기 위한 연산으로 단항 연산자이다.
3.3.1 합집합, 3.3.2 교집합, 3.3.3 차집합, 3.3.4 카티전 프로덕트
합집합은 두 개의 릴레이션을 합하여 하나의 릴레이션을 반환한다. 이 때 두개의 릴레이션은 서로 같은 속성 순서와 도메인을 가져야 한다.
교집합은 합병가능한 두 릴레이션을 대상으로 하며, 두 릴레이션이 공통으로 가지고 있는 튜플을 반환한다.
차칩합은 첫 번째 릴레이션에는 속하고 두 번째 릴레이션에는 속하지 않는 튜플을 반환한다.
카티전 프로덕트는 두 릴레이션을 연결시켜 하나로 합칠 때 사용한다. 결과 릴레이션은 첫 번째 릴레이션의 오른쪽에 두 번째 릴레이션의 모든 투플을 순서대로 배열하여 반환한다. 결과 릴레이션의 차수는 두 릴레이션의 차수의 합이며, 카디날리티는 두 릴레이션의 카디날리티의 곱이다.
3.4 조인(join)
두 릴레이션의 공통 속성을 기준으로 속성 값이 같은 튜플을 수평으로 결합하는 연산이다. 조인을 수행하기 위해서는 두 릴레이션의 조인에 참여하는 속성이 서로 동일한 도메인으로 구성돼야 한다. 조인 연산의 결과는 공통 속성의 속성 값이 동일한 튜플만을 반환한다.
3.4.1 세타조인과 동등조인
3.4.2 자연조인
동등 조인에서 조인에 참여한 속성이 두 번 나오지 않도록 두 번째 속성을 제거한 결과를 반환한다.
3.4.3 외부조인과 세미조인
외부조인은 자연조인 시 조인에 실패한 튜플을 모두 보여주되 값이 없는 대응 속성에는 NULL 값을 채워서 반환한다.
모든 속성을 보여주는 기준 릴레이션 위치에 따라 왼쪽 외부조인, 오른쪽 외부조인, 완전 외부조인으로 나뉜다.
세미조인은 자연조인을 한 후 두 릴레이션 중 한쪽 릴레이션의 결과만 반환하며, 기호에서 닫힌 쪽 릴레이션의 튜플만 반환한다.
3.5 디비전 (division)
릴레이션의 속성 값의 집합으로 연산을 수행한다.
3.6.1 셀렉션, 프로젝션, 집합연산의 복합 사용
3.6.2 카티전 프로덕트를 사용한 연산과 조인을 사용한 연산
728x90반응형'전공공부 > 데이터베이스' 카테고리의 다른 글
6. 정규화 (1) 2020.01.03 5. 데이터 모델링 (0) 2020.01.02 4. SQL 고급 (0) 2020.01.01 3. SQL 기초 (0) 2020.01.01 1. 데이터 베이스 개요 (0) 2019.12.29