춘식이왔엉 2022. 5. 3. 22:30

<릴레이션의 특징>

- 속성은 단일 값을 가진다. 

  각 속성의 값은 도메인에 정의된 값만을 가지며, 그 값은 모두 단일 값이여야 함.

- 속성은 서로 다른 이름을 가진다.

- 한 속성의 값은 모두 같은 도메인 값을 가진다.

  한 속성에 속한 열은 모두 그 속성에서 정의한 도메인 값만 가질 수 있음.

- 속성의 순서는 상관없다

  속성의 순서가 달라도 릴레이션 스키마는 같음.

- 릴레이션 내의 중복된 tuple은 허용하지 않는다. (모든 속성의 값이 같은 경우 중복)

  하나의 릴레이션 인스턴스 내에서는 서로 중복된 값을 가질 수 없음. 즉 모든 tuple은 서로 값이 달라야 함.

- tuple의 순서는 상관없다.

 


관계 데이터 모델

- 관계 데이터 모델은, 데이터를 2차원 테이블 형태인 릴레이션으로 표현함.

- 릴레이션에 대한 제약조건과 관계 연산을 위한 관계대수를 정의함.

 

🔑

- 특정 tuple을 식별할 때 사용하는 속성 혹은 속성의 집합

- 릴레이션은 중복된 tuple을 허용하지 않기 때문에, 각각의 tuple에 포함된 속성들 중 최소 하나 이상은 값이 달라야 함.

   즉, 키가 되는 속성(혹은 속성의 집합)은 반드시 tuple들을 서로 구별할 수 있어야 함

- 키는 릴레이션 간의 관계를 표현하는데 사용됨

 

* 슈퍼키 -> 多

 - 릴레이션 내 tuple을 식별할 수 있는 속성의 집합 

* 후보키 

 - tuple을 식별할 수 있는 속성의 최소 집합

 - 유일성과 최소성을 모두 만족시켜야 함

* 기본키

 - 후보키 중 선정된 키

* 대체키

 - 기본키로 선정되지 않은 후보키

 

그 외)

* 복합키

 - 2개 이상의 속성으로 이루어진 키 ex - (고객번호, 도서번호)

* 대리키 / 인조키

 - 기본키가 보안을 요하거나, 여러 개의 속성으로 구성되어 복잡하거나, 마땅한 기본키가 없을 때

    일련번호 같은 가상의 속성을 만들어 기본키로 삼는 것.

* 외래키

- 다른 릴레이션의 기본키를 참조하는 속성

- 릴레이션 간의 관계(relationship)를 표현함

< 외래키의 특징 > 

  • 관계 데이터 모델의 릴레이션 간의 관계를 표현함
  • 다른 릴레이션의 기본키를 참조하는 속성
  • 참조하고(외래키) 참조되는(기본키) 양쪽 릴레이션의 도메인은 서로 같아야 함
  • 참조되는(기본키) 값이 변경되면 참조하는(외래키) 값도 변경됨
  • NULL 값과 중복 값 등이 허용됨
  • 자기 자신의 기본키를 참조하는 외래키도 가능
  • 외래키가 기본키의 일부가 될 수 있음

 

* 기본키 선정 시 고려사항

- 릴레이션 내 tuple을 식별할 수 있는 고유한 값을 가져야 함

- NULL 값은 허용하지 않음

- 키 값의 변동이 일어나지 않아야 함

- 최대한 적은 수의 속성을 가진 것이여야 함

- 향후 키를 사용하는데 있어서, 문제 발생 소지가 없어야 함 (주민번호를 기본키로 안쓰는 이유)

 

* 릴레이션 스키마를 표현할 때, 기본키는 밑줄을 그어 표시함

  고객(고객번호, 이름, 주민번호, 주소, 핸드폰)

  도서(도서번호, 도서이름, 출판사, 가격)


 

* 무결성 제약조건

- 무결성 = 일관성 + 정확성

1. 도메인 무결성 제약조건

- 도메인 제약

- 릴레이션 내의 tuple들이 각 속성의 도메인에 지정된 값만을 가져야 한다. (ex. 나이는 200이 될 수 없다.)

 

2. 개체 무결성 제약조건

- 기본키 제약

- 기본키는 NULL 값을 가져서는 안되며, 릴레이션 내에 오직 하나의 값만 존재해야 한다.

 

3. 참조 무결성 제약조건

- 외래키 제약

- 릴레이션 간의 참조 관계를 선언하는 제약조건

- 자식 릴레이션의 외래키는 부모 릴레이션의 기본키와 도메인이 동일해야하며,

  자식 릴레이션의 값이 변경될 때 부모 릴레이션의 제약을 받는다. 

 

 

 

* 개체 무결성 제약조건

  • 삽입 : 기본키 값이 같으면 삽입이 금지됨.
  • 수정 : 기본키 값이 같거나 NULL로도 수정이 금지됨.
  • 삭제 : 특별한 확인이 필요하지 않으며 즉시 수행함.

<삽입>

- 학과(부모 릴레이션) : 투플 삽입한 후 수행하면 정상적으로 진행된다.


- 학생(자식 릴레이션) : 참조받는 테이블에 외래키 값이 없으므로 삽입이 금지된다. 

 

<삭제>

- 학과(부모 릴레이션) : 참조하는 테이블을 같이 삭제할 수 있어서 금지하거나 다른 추가 작업이 필요함.


- 학생(자식 릴레이션) : 바로 삭제 가능함. 

※ 부모 릴레이션에서 투플을 삭제할 경우 참조 무결성 조건을 수행하기 위한 고려사항
 - 즉시 작업을 중지
 - 자식 릴레이션의 관련 투플을 삭제
 - 초기에 설정된 다른 어떤 값으로 변경
 - NULL 값으로 설정

명령어 의미
RESTRICTED 자식 릴레이션에서 참조하고 있을 경우
부모
릴레이션의 삭제 작업을 거부함
학과 릴레이션의 투플 삭제 거부
CASCADE 자식 릴레이션의 관련 투플을 같이 삭제 처리함 학생 릴레이션의 관련 투플을 삭제
DEFAULT 자식 릴레이션의 관련 투플을 미리 설정해둔 값으로 변경함 학생 릴레이션의 학과가 다른 학과로 자동 배정
NULL 자식 릴레이션의 관련 투플을 NULL 값으로 설정함(NULL 값을 허가한 경우) 학과 릴레이션의 학과가 NULL 값으로 변경

 

<수정>

- 삭제와 삽입 명령이 연속해서 수행됨.


- 부모 릴레이션의 수정이 일어날 경우 삭제 옵션에 따라 처리된 후 문제가 없으면 다시 삽입 제약조건에 따라 처리됨.