Skip to content
- 기본 용어
- 릴레이션(relation) : 2차원의 테이블(스프레드 시트와 유사)
- 레코드(record) : 릴레이션의 각 행
- 투플(tuple) : 레코드를 좀더 공식적으로 부르는 용어
- 애트리뷰트(attribute) : 릴레이션에서 이름을 가진 하나의 열
- 도메인
- 한 애트리뷰트에 나타날 수 있는 값들의 집합
- 각 애트리뷰트의 도메인의 값들은 원자값
- 프로그래밍 언어의 데이터 타입과 유사함
- 도메인 정의 예
|
CREATE DOMAIN EMPNAME CHAR(10) CREATE DOMAIN EMPNO INTEGER |
- 차수(degree) : 한 릴레이션에 들어 있는 애트리뷰트들의 수
- 유효한 릴레이션의 최소 차수는 1
- 카디날리티(cardinality) : 릴레이션의 투플 수
- 유효한 릴레이션은 카디날리티 0을 가질 수 없음
- 용어들의 대응 관계
- 널(NULL)
- ‘알려지지 않음’ 또는 ‘적용할 수 없음’을 나타내기 위해 사용
- 릴레이션 스키마(relation schema)
- 릴레이션의 틀(framework)
- 릴레이션의 이름과 릴레이션의 애트리뷰트들의 집합
- 표기법
- 릴레이션이름(애트리뷰트1, 애트리뷰트1,…, 애트리뷰트n)
- 기본 키 애트리뷰트에는 밑줄 표시
- 내포(intension)라고도 함
- 릴레이션 인스턴스(relation instance)
- 릴레이션에 어느 시점에 들어있는 투플들의 집합
- 시간의 흐름에 따라 계속 변함
- 일반적으로 릴레이션에는 현재의 인스턴스만 저장됨
- 외연(extension)이라고 함
- 관계 데이터베이스(relational database) 스키마
- 하나 이상의 릴레이션 스키마들로 이루어짐
- 관계 데이터베이스 인스턴스
- 릴레이션 인스턴스들의 모임으로 구성됨
- 릴레이션의 특성
- 각 릴레이션은 오직 하나의 레코드 타입만 포함
- 한 애트리뷰트 내의 값들은 모두 같은 유형
- 애트리뷰트들의 순서는 중요하지 않음
- 동일한 투플이 두 개 이상 존재하지 않음(즉, 키가 존재함)
- 한 투플의 각 애트리뷰트는 원자값을 가짐
- 각 애트리뷰트의 이름은 한 릴레이션 내에서만 고유
- 투플들의 순서는 중요하지 않음
- 릴레이션 키
- 수퍼키(superkey)
- 한 릴레이션 내의 특정 투플을 고유하게 식별하는 하나의 애트리뷰트 또는 애트리뷰트들의 집합
- 투플들을 고유하게 식별하는데 꼭 필요하지 않은 애트리뷰트들이 포함 가능
- 예 : (신용카드번호, 주소), (주민등록번호, 이름), (주민등록번호)
- 후보키(candidate key)
- 각 투플을 고유하게 식별하는 최소한의 애트리뷰트들의 모임
- 예 : (신용카드번호), (주민번호), (학번, 과목번호)
- 수퍼키 중 후보키가 안되는 예 : (신용카드번호, 주소), (주민등록번호, 이름)
- 기본키(primary key)
- 후보키 중 1개를 기본키로 설정
- 대체키(alternate key)
- 기본키가 아닌 후보키
- 외래키(foreign key)
- 다른 릴레이션의 기본키를 참조하는 애트리뷰트
- 키들의 포함 관계
- 무결성 제약조건
- 데이터 무결설(data integrity)
- 데이터의 정확성 또는 유효성을 의미
- 도메인 제약조건(domain constraint)
- 각 애트리뷰트의 값이 반드시 원자값이어야 함
- CHECK 제약 조건을 통해 값들의 범위를 제한할 수 있음
- 키 제약조건(key constraint)
- 키 애트리뷰트에 중복된 값이 존재해서는 안됨
- 기본키와 엔티티 무결성 제약조건(entity integrity constraint)
- 기본키를 구성하는 어떤 애트리뷰트도 Null값을 가질 수 없음
- 릴레이션 생성시 기본키를 DBMS에게 알려줌
- 외래키와 참조 무결성 제약조건(referential integrity constraint)
- 참조 무결성 제약조건은 두 릴레이션의 연관된 투플들 사이의 일관성을 유지하는데 사용
- R2의 외래키가 R1의 기본키를 참조할 때 참조무결성 제약조건 성립 조건
- R2의 외래키 값은 R1의 어떤 투플의 기본키와 같다
- R2의 외래키가 참조하는 기본키가 없으면 Null값을 가짐
- 참조 무결성 제약조건 (EMPLOYEE = R2, DEPARTMENT = R1)
- 삽입
- R1, R2를 포함한 모든 릴레이션에는 도메인 제약조건, 키 제약조건, 엔티티 무결성 제약조건을 지켜야 함
- R1에 삽입시는 참조 무결성 제약조건을 위배하지 않음
- (9, 기타, 10) 과 같은 어떤 투플이 입력되도 문제 없음
- R2에 삽입시는 참조 무결성 제약조건을 위배하는 경우 발생
- (3579, 홍길동, 5)를 저장하면 참조 무결성 제약조건에 위배됨
- R1에 DEPTNO에는 5가 존재하지 않으므로
- 삭제
- R2에서 투플을 삭제할 땐 참조 무결성 제약조건을 위배하지 않음
- R1에서 삭제시엔 참조 무결성 제약조건을 위배하는 경우 발생
- R1에서 (3, 개발, 9)을 삭제하면 R2의 박영권, 최종철의 DNO=?
- 수정
- 수정하려는 애트리뷰트가 기본키 or 외래키가 아니면 참조 무결성 제약조건을 위배하지 않음
- 수정하려는 애트리뷰트가 기본키 or 외래키일 경우 참조 무결성 제약조건에 위배되는 경우 발생
- R1에서 (3, 개발, 9) 투플에서 3을 5로 수정하면 박영권, 최종철의 DNO=?
- R2에서 (3011, 이수민, 1) 투플에서 1을 R1에 없는 5로 수정하면
- 참조 무결성 제약조건을 만족하기 위한 옵션
- 제한(restricted)
- R1에서 (3, 개발, 9)을 삭제하면 삭제 연산을 거절
- 연쇄(cascade)
- R1에서 (3, 개발, 9)을 삭제하면 R2의 박영권, 최종철 투플도 함께 삭제
- 널값(Nullify)
- R1에서 (3, 개발, 9)을 삭제하면 R2의 박영권, 최종철의 DNO에 Null 삽입
- 디폴트(Default)
- R1에서 (3, 개발, 9)을 삭제하면 R2의 박영권, 최종철의 DNO에 defualt값 삽입
- 외래키 참조 무결성 제약조건 사용 예
- FOREIGN KEY(dno) REFERENCES department(deptno)
ON DELETE SET NULL
ON UPDATE CASCADE
- FOREIGN KEY(dno) REFERENCES department(deptno)
ON DELETE RESTRICT
ON UPDATE NO ACTION
- 룰(rule)
- RESTRICT : 변경/삭제가 취소(즉 변경/삭제 안 됨)
- CASCADE : 개체를 변경/삭제할 때 참조하고 있는 릴레이션의 개체도 같이 변경/삭제
- NO ACTION : 개체를 변경/삭제해도 참조하고 있는 릴레이션의 개체는 변동 없음
- SET NULL : 개체를 변경/삭제해도 참조하고 있는 릴레이션의 개체는 NULL로 설정
- …
error: Content is protected !!