[데이터베이스] 3강. 관계 데이터 모델과 관계 무결성 제약 조건

관계 데이터 모델과 관계 무결성 제약 조건


관계형 데이터베이스의 구조

릴레이션(Relation) = 표(Table)


속성(Attribute) = 열(Column) = 필드(Field)

학번(no) 이름(name) 학과(dept)
001 정승현 전기
002 이지용 전자
003 최대성 컴퓨터
004 김산다라 데이터사이언스

속성의 개수 = 차수(Degree) = 3



<'001', '정승현', '전기'>, <'002', '이지용', '전자'>,
<'003', '최대성', '컴퓨터'>, <'004', '김산다라', '데이터사이언스'>


속성 (Attribute)


차수 (Degree)


튜플 (Tuple) = 행 (Row) = 레코드 (Record)


기수 (Cardinality) = 튜플 (Tuple)의 개수 = 행 (Row)의 개수 = 4


원자값 (Atomic)


도메인 (Domain)


CREATE DOMAIN no INTEGER
-- 숫자형태의 학번
CREATE DOMAIN name VARCHAR(10)
-- 문자열 10글자이내의 이름
CREATE DOMAIN dept VARCHAR(10)
-- 문자열 10글자이내의 학번


릴레이션 스키마와 인스턴스

릴레이션 = 릴레이션 스키마 + 릴레이션 인스턴스
릴레이션 스키마 = 학번, 이름, 학과
릴레이션 인스턴스 = 001, 정승현, 전기

릴레이션이름(기본키, 속성이름1, 속성이름2, 속성이름3…)
(기본키에 언더라인 붙음)

학생(학번(no), 이름(name), 학과(dept), 학과(dept))


릴레이션의 특징

릴레이션 = 추상적인 개념, 테이블 = 구체적인 표현


튜플의 유일성(Uniqueness of Tuples)


튜플의 무순서성(No Ordering of Tuples)


학생1 릴레이션

학번(no) 이름(name) 학과(dept)
001 정승현 전기
002 이지용 전자
003 최대성 컴퓨터
004 김산다라 데이터사이언스


학생2 릴레이션

학번(no) 이름(name) 학과(dept)
004 김산다라 데이터사이언스
003 최대성 컴퓨터
002 이지용 전자
001 정승현 전기


학생1 릴레이션과 학생2 릴레이션은 같다.
테이블은 다르지만 같은 원소값을 가진 동일한 릴레이션이기 때문


속성의 무순서성(No Ordering of Attributes)


속성의 원자성(Atomicity of Attribute)


키와 개념과 종류

키(Key)


이상(Anomaly) 현상


약한 개체와 강한 개체

서치해서 좀 더 알아보기

약한 개체 타입(Weak Entity Type)


강한 개체 타입(Strong Entity Type)


슈퍼키와 후보키

슈퍼키(Super Key) - 유일성 O, 최소성 X


후보키(Candidate Key)


기본키(Primary Key: PK)


대체키(Alternate Key)


외래키(Foreign Key)

교수(교수번호, 교수이름, 학과번호, 직급)
학과(학과번호, 학과이름, 학과장, 학생수)

외래키


무결성 제약 조건

데이터 모델링 구성요소 : 데이터 구조, 연산, 제약조건

개체 무결성 제약(Entity Integrity Constraint)


참조 무결성 제약(Referential Integrity Constraint)


참조 무결성 제약조건의 유지

두 테이블 간에 외래키에 의한 참조 관계에 있고 두 테이블 간 데이터 불일치가 발생하는 상황이 될 때, DBMS는 제한(Restrict), 연쇄(Cascade), 널 값으로 대체(Nullify)와
같은 조치를 취할 수 있음


부서테이블의 첫 번째 튜플을 삭제하려 할 때

  1. 제한(Restict)은 삭제하려는 튜플의 부서 번호 값을 사원 테이블에서 가지고 있는 튜플이 있으므로 삭제 연산을 거절
  2. 연쇄(Cascade)는 삭제된 부서 번호 값을 갖는 사원 테이블의 튜플도 함께 삭제
  3. 널 값으로 대체(Nullify)는 삭제연산을 수행한 뒤 삭제된 부서 번호 값을 갖는 사원 테이블의 튜플에서 부서 번호를 Null 값으로 대체