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 예시문
'코딩 > SQL, Mysql' 카테고리의 다른 글
[Sql] key와 super key, 좋은 Primary key의 조건 (0) | 2024.04.20 |
---|---|
[Mysql] (1054, "Unknown column in 'field list'") 오류해결 (0) | 2024.02.05 |