MySQL - Intergrity, Keys

김법우·2021년 12월 10일
0

Database

목록 보기
4/10
post-thumbnail

Intergrity

intergrity 는 기본적으로 database 에 있는 데이터의 accuracy, correctness 를 의미한다.

무엇에 대한 정확도, 정확성을 말하는가?

  1. Business Rules
    1. 비즈니스의 한 부분을 정의하거나 제약된 측면을 기술하는 구문.
    2. User 가 응용에 따라 테이블의 column 값의 범위 값을 지정하는 경우에 대한 제약
    3. Intergrity Constraint 로 표현 할 수 있다.
  2. Intergrity Rules
    1. 테이블 간의 참조 관계(Referential Relationship)에 따라 기술해야 하는 제약조건
    2. 참조 관계는 Primary Key(이하 PK)와 Foreign Key(이하 FK)의 관계로 정의된다.

Keys ...

Relation 에는 PK 가 Unique Identifier(식별자)로 정의되어야만 한다.

이런 PK 는 Candidate Key(이하 CK)중 하나를 정하고 다른 하나는 Alternate Key(이하 AK)라고 한다.

CK (Candidate Key)

주어진 relation R 에 대해 특정 Key 가 CK 일 조건은 하단 2가지 이다.

CK 의 조건

R 의 전체 attributes 의 subset을 CK 인 K 라고 할때,

  1. Uniquness

    R 의 어떠한 2개의 Tuples의 K 값이 같지 않다.

    ⇒ CK 를 제외하고 어떠한 key 값도 식별자의 역할을 할 수 없다.

    ⇒ CK 는 반드시 식별자의 역할을 해야 한다.

  2. 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 이었을 것이다. (뇌피셜)

어쨋든,

  1. MySQL 은 tuple 의 attribute set 의 값을 통해 해당 tuple 을 특정한다.
  2. 그렇기 때문에, 이러한 attribute set 이 Unique Identifier 의 역할을 하기 위해서는 위의 CK 조건 2가지를 만족 해야 한다.

이 부분을 잘 이해하고 기억하자.

FK (Foreign Key)

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

profile
개발을 사랑하는 개발자. 끝없이 꼬리를 물며 답하고 찾는 과정에서 공부하는 개발자 입니다. 잘못된 내용 혹은 더해주시고 싶은 이야기가 있다면 부디 가르침을 주세요!

0개의 댓글