5. 무결성 제약 조건
지금까지 도메인, 키 등 데이터베이스를 유지하기 위한 조건에 대해 글을 작성했었다.
이번 게시글에서는 데이터의 정확성, 일관성, 신뢰성을 유지하는 데이터 무결성에 대해 말해보겠다
데이터 무결성에는 여러 종류가 있는데 이번 포스팅에서는 도메인 무결성 제약조건, 개체 무결성 제약조건, 참조 무결성 제약조건 3가지에 대해 다뤄본다
- 도메인 무결성 제약조건
• 도메인 제약
• 릴레이션 내의 투플들이 각 속성의 도메인에 지정된 값만을 가져야 한다는 조건이다
• SQL문에서 데이터 형식, 널, 기본 값, 체크 등을 사용하여 지정 가능하다
- 개체 무결성 제약조건
• 기본키 제약
• 릴레이션은 기본키를 지정하고 그에 따른 무결성 원칙
• 기본값은 null을 가져서는 아니되며 릴레이션 내에 오직 하나의 값만 존재해야 함
삽입: 기본키 값이 같으면 삽입이 금지됨
삭제: 특별한 확인이 필요하지 않으며 즉시 수행함
수정: 기본키 값이 같거나 null로도 수정이 금지됨
- 참조 무결성 제약조건
• 외래키 제약
• 릴레이션 간의 참조 관계를 선언하는 제약 조건
• 자식 릴레이션의 외래키는 부모 릴레이션의 기본키와 도메인이 동일해야 하며 자식 릴레이션의 값이 변경될 때 부모 릴레이션의 제약을 받는다
특히 부모 릴레이션과 자식 릴레이션이 있을 시 서로 연결되는 외래키와 같은 존재 때문에 함부로 수정, 삭제 시 문제가 발생할 가능성이 있다
-> 삭제시
부모 릴레이션의 경우 참조하는 테이블을 같이 삭제할 수 있어 금지 및 다른 추가 작업이 필요하다
① 해당 부모 릴레이션을 참조하는 학생이 존재한다면 그대로 삭제 불가능
② 자식 릴레이션은 부모 릴레이션에 영향을 주지는 않기에 삭제 가능
__부모 릴레이션을 삭제하고 싶다면__
① 해당 부모 릴레이션을 참조하는 자식 릴레이션이 남아있다면 참조 무결성 위배로 삭제 불가
② 자식 릴레이션의 관련 튜플을 삭제한다면 삭제 가능
③ 외래키를 다른 유효한 값으로 변경한다면 삭제 가능
④ 외래키 값에 null을 허용한다면 null로 변경 후 삭제 가능
--> 수정 시
부모 릴레이션의 기본키 값이 변경되면 자식 릴레이션의 외래키 값이 참조 무결성을 위반할 수 있다
따라서 삭제와 삽입 명령이 연속해서 수행되는 형태로 처리된다 즉 삭제 옵션에 따라 기존 데이터를 먼저 처리하고 새로운 데이터를 다시 삽입하는 과정이 필요하다.
즉 삭제 옵션에 따라 처리하고 수정을 진행한다.