intergrity 는 기본적으로 database 에 있는 데이터의 accuracy, correctness 를 의미한다.
무엇에 대한 정확도, 정확성을 말하는가?
Relation 에는 PK 가 Unique Identifier(식별자)로 정의되어야만 한다.
이런 PK 는 Candidate Key(이하 CK)중 하나를 정하고 다른 하나는 Alternate Key(이하 AK)라고 한다.
주어진 relation R 에 대해 특정 Key 가 CK 일 조건은 하단 2가지 이다.
CK 의 조건
R 의 전체 attributes 의 subset을 CK 인 K 라고 할때,
Uniquness
R 의 어떠한 2개의 Tuples의 K 값이 같지 않다.
⇒ CK 를 제외하고 어떠한 key 값도 식별자의 역할을 할 수 없다.
⇒ CK 는 반드시 식별자의 역할을 해야 한다.
Irreducibility(Minimality)
K 의 어떠한 Subset 도 Uniquness 조건을 만족하지 않는다.
⇒ K 의 부분집합 (K 중 어느 attribute 를 제외한 경우)을 취한 경우 해당 부분집합은 CK 로서의 역할을 할 수 없다는 뜻.
⇒ 말 그대로 Minimal, CK 는 최소한의 attributes 로 Identifier 의 역할을 한다.
위 두가지 조건을 만족하는 Attributes Set 이 Candidate Key 이다.
CK 는 대채 왜 중요한가?
MySQL 은 기본적으로 tuple-level addressing mechanisms 을 제공한다.
여기서 tuple-level addressing 이라는 의미는 tuple 자체의 attribute 값으로 특정 tuple 을 찾아낸다는 의미이다.
만약 relation 내에서 tuple 의 저장 순서나 tuple 의 데이터 크기로 특정 tuple 을 찾는다면, relation-level addressing 이었을 것이다. (뇌피셜)
어쨋든,
이 부분을 잘 이해하고 기억하자.
FK 를 Relation R2 의 attribute 집합이라고 하고, Relation R1 의 Candidate Key 를 CK 라고 할 때 R2 의 FK 에 대하여 대응되는 CK 값이 존재 할 때 FK 를 Foriegn Key 라고 한다.
즉, foriegn key 값은 대응되는 다른 테이블(참조 하는 테이블)의 CK 를 reference(target tuple 혹은 referenced tuple)한다.
Referential Intergrity
FK 가 존재할 경우 FK 값에 대응되는 PK 값이 반드시 존재해야 한다는 제약 조건.
if B references A ⇒ A 는 반드시 존재해야함.
Referential Intergrity 를 만족시키기 위해 규칙을 만족하지 않는 연산에 대한 조치로 Reject 혹은 Accept 할 경우 추가적인 action 을 해야 할 수도 있는데 이를 Referential Action 이라고 한다.
ex) on update cascade, on delete cascade