본문 바로가기
코딩/SQL, Mysql

[Sql] 무결성 제약조건(Integrity Constrains)

by JuBro 2024. 4. 20.

Relation들은, 꼭 지켜야하는 무결성 제약조건이라는 것이 존재한다.

  • Key Integrity
  • Entity Integrity
  • Referential Integrity

 

Key Integrity

Key로 구분되는 튜플들은 모두 그 값이 달라야 한다. (Key의 정의에따라)

 

Entity Integrity

Primary Key는 NULL값을 가질 수 없다.

 

Referential Integrity

참조를 하려면 공통인 부분이 있는 attribute를 선정해야한다. 

참조되는 쪽의 PK(Primary key), 참조하는 쪽은 FK(Foreign Key)라고 한다.

위 예시를 보면, Player relaltion에서 Team의 팀명을 참조한다. player.팀명 과 Team.팀명의 공통인 attribute가 있고, 참조하는 쪽의 player.팀명이 FK, 참조되는 Team의 Team.팀명이 PK인것도 확인할 수 있다.

 

 

참조 무결성 위반

참조 무결성이 위반되는 경우는 두가지가 있다.

1. 참조하는 쪽에서 새로운 정보가 들어왔는데, 참조되는 쪽에 정보가 없을 때

2. 참조되는 쪽에서 PK값을 수정하거나 없앴을 때!

 

Trigger

그래서 SQL에선 다음과 같은 참조 무결성 위반을 방지하기 위해, Trigger을 설정한다.

  • CASCADE(종속) : PK값을 따라서 행동
  • SET NULL: NULL로 설정
  • SET DEFAULT: 사용자의 기본값으로 설정

⭐SET NULL은 참조하는 RELATION에서 FK가 PK의 일부일때(PK가 FK를 포함하는 Composite key일때), 사용할 수 없다.

 

실제 sql에선 3가지의 trigger action과 그에 따른 event들이 있으므로, 위 표에선 3x2=6가지의 경우의 수가 가능하다. 

  • ON DELETE CASCADE : PK값 삭제시 참조하는 FK 튜플도 삭제
  • ON UPDATE CASCADE : PK 값 업데이트 될때마다 따라서 FK값도 변경
  • ON DELETE SET NULL : 참조하는 FK값 NULL로 설정
  • ON UPDATE SET NULL : 참조하는 FK값 NULL로 설정
  • ON DELETE SET DEFAULT : 참조하는 FK값 DEFAULT로 설정
  • ON UPDATE SET DEFAULT : 참조하는 FK값 DEFAULT로 설정

 

 

실제 SQL 예시문