자격증/정보처리기사 📌 [정보처리기사] 논리 데이터베이스 설계 - 관계형 데이터베이스의 제약 조건: 키(Key)/무결성
  • 728x90
    반응형

     

     

    목차

       

      ✨ 제약 조건이란 데이터베이스에 저장되는 데이터의 정확성을 보장하기 위하여 키(Key)를 이용하여 입력되는 데이터에 제한을 주는 것으로 개체 무결성 제약, 참조 무결성 제약 등이 해당된다.

       

       

      키(Key)의 개념 및 종류

      📌 키는 데이터베이스에서 조건에 만족하는 튜플을 찾거나 순서대로 정렬할 때 튜플들을 서로 구분할 수 있는 기준이 되는 애트리뷰트를 말한다.

       

      <학생> 릴레이션

      학번 주빈번호 성명
      1001 010429-3****** 홍길동
      1002 000504-3****** 강감찬
      1003 011215-3****** 윤봉길
      1004 001225-4****** 유관순

       

      <수강> 릴레이션

      학번 과목명
      1001 영어
      1001 전산
      1002 영어
      1003 수학
      1004 영어
      1004 전산

       

      • 키의 종류에는 후보키, 기본키, 대체키, 슈퍼키, 외래키 등이 있다.

       

      후보키(Candidate Key)

      📌 후보키는 릴레이션을 구성하는 속성들 중에서 튜플을 유일하게 식별하기 위해 사용하는 속성들의 부분집합, 즉 기본키로 사용할 수 있는 속성들을 말한다.

      • 하나의 릴레이션 내에서는 중복된 튜플들이 있을 수 없으므로 모든 릴레이션에는 반드시 하나 이상의 후보키가 존재한다.
      • 후보키는 릴레이션에 있는 모든 튜플에 대해서 유일성과 최소성을 만족시켜야 한다.
        • 유일성(Unique) : 하나의 키 값으로 하나의 튜플만을 유일하게 식별할 수 있어야 한다.
        • 최소성(Minimality) : 모든 레코드들을 유일하게 식별하는 데 꼭 필요한 속성만으로만 구성되어야 한다.

       

      💡 <학생> 릴레이션에서 '학번'이나 '주민번호'는 다른 레코드를 유일하게 구별할 수 있는 기본키로 사용할 수 있으므로 후보키이다.

       

       

      기본키(Primary Key)

      📌 기본키는 후보키 중에서 특별히 선정된 주기(Main Key)로 중복된 값을 가질 수 없다.

      • 한 릴레이션에서 특정 튜플을 유일하게 구별할 수 있는 속성이다.
      • 기본키는 후보키의 성질을 갖는다. 즉, 유일성과 최소성을 가지며 튜플을 식별하기 위해 반드시 필요한 키이다.
      • 기본키는 NULL 값을 가질 수 없다. 즉 튜플에서 기본키로 설정된 속성에는 NULL 값이 있어서는 안된다.

       

      🔔 예) <학생> 릴레이션에서는 '학번'이나 '주민번호'가 기본키가 될 수 있고, <수강> 릴레이션에서는 '학번'+'과목'으로 조합해야 기본키가 만들어진다.

       

      🔔 예) '학번'이 <학생> 릴레이션의 기본키로 정의되면 이미 입력된 '1001'은 다른 튜플의 '학번'속성의 값으로 입력할 수 없다.

       

      💡 널 값(NULL Value) : 데이터베이스에서 아직 알려지지 않거나 모르는 값으로서 '해당 없음' 등의 이유로 정보 부재를 나타내기 위해 사용하는 이론적으로 아무것도 없는 특수한 데이터를 말한다.

       

       

       

      대체키(Alternate Key)

      📌 대체키는 후보키가 둘 이상일 때 기본키를 제외한 나머지 후보키를 의미한다.

      • 보조키 라고도 한다.

      🔔 예) <학생> 릴레이션에서 '학번'을 기본키로 정의하면 '주민번호'는 대체키가 된다.

       

       

       

      슈퍼키(Super Key)

      📌 슈퍼키는 한 릴레이션 내에 있는 속성들의 집합으로 구성된 키로서 릴레이션을 구성하는 모든 튜플들 중 슈퍼키로 구성된 속성의 집합과 동일한 값은 나타나지 않는다.

      • 슈퍼키는 릴레이션을 구성하는 모든 튜플에 대해 유일성은 만족시키지만, 최소성은 만족시키지 못한다.

       

      🔔 예)  <학생> 릴레이션에서는 '학번', '주민번호', '학번' + '주민번호', '주민번호' + '성명', '학번' + '주민번호' + '성명' 등으로 슈퍼키를 구성할 수 있다.

       

      💡 최소성 : '학번' + '주민번호'를 사용하여 슈퍼키를 만들면 다른 튜플들과 구분할 수 있는 유일성은 만족하지만, '학번'이나 '주민번호' 하나만 가지고도 다른 튜플들을 구분할 수 있으므로 최소성은 만족시키지 못한다.

       

       

       

      외래키(Foreign Key)

      📌 외래키는 다른 릴레이션의 기본키를 참조하는 속성 또는 속성들의 집합을 의미한다.

      • 외래키는 참조되는 릴레이션의 기본키와 대응되어 릴레이션 간에 참조 관계를 표현하는데 중요한 도구이다.
      • 한 릴레이션에 속한 속성 A와 참조 릴레이션의 기본키인 B가 동일한 도메인 상에서 정의되었을 때의 속성 A를 외래키라고 한다.
      • 외래키로 지정되면 참조 릴레이션의 기본키에 없는 값은 입력할 수 없다.

      🔔 예) <수강> 릴레이션이 <학생> 릴레이션을 참조하고 있으므로 <학생> 릴레이션의 '학번'은 기본키 이고, <수강> 릴레이션의 '학번'은 외래키이다.

       

      🔔 예) <수강> 릴레이션의 '학번'에는 <학생> 릴레이션의 '학번'에 없는 값은 입력할 수 없다.

       

      💡 참조 릴레이션 : 외래키를 포함하는 릴레이션이 참조하는 릴레이션이고 대응되는 기본키를 포함하는 릴레이션이 참조 릴레이션이다. 여기서는 <수강> 릴레이션이 참조하는 릴레이션이고, <학생> 릴레이션이 참조 릴레이션이다.

       

       

       


       

       

       

      무결성(integrity)의 개념 및 종류

      📌 무결성이란 데이터베이스에 저장된 데이터 값과 그것이 표현하는 현실 세계의 실제 값이 일치하는 정확성을 의미한다.

      • 무결성 제약 조건은 데이터베이스에 들어 있는 데이터의 정확성을 보장하기 위해 부정확한 자료가 데이터베이스 내에 저장되는 것을 방지하기 위한 제약 조건을 말한다.
      • 무결성의 종류에는 개체 무결성, 도메인 무결성, 참조 무결성, 사용자 정의 무결성 등이 있다.

       

      학번 주빈번호 성명
      1001 010429-3****** 홍길동
      1002 000504-3****** 강감찬
      1003 011215-3****** 윤봉길
      1004 001225-4****** 유관순

       

      <수강> 릴레이션

      학번 과목명
      1001 영어
      1001 전산
      1002 영어
      1003 수학
      1004 영어
      1004 전산

       

      💡 무결성이란 ? 쉽게 말해 저장된 데이터베이스에 잘못된 데이터가 없다는 것을 의미한다. 위 릴레이션 테이블에서  주어진 <학생> 릴레이션과 <수강> 릴레이션은 '학번'을 기준으로 일대다(1:N)의 관계를 맺고 있다.
      <학생> 릴레이션과 <수강> 릴레이션을 통해 무결성 종류를 확실하게 이해하자.

       

       

       

      개체 무결성(Entity Integrity, 실체 무결성)

      📌 개체 무결성은 기본 테이블의 기본키를 구성하는 어떤 속성도 Null 값이나 중복 값을 가질 수 없다는 규정이다.

       

      🔔 예) <학생> 릴레이션에서 '학번'이 기본키로 정의되면 튜플을 추가할 때 '주민번호'나 '성명' 필드 에는 값을 입력하지 않아도 되지만 '학번' 속성에는 반드시 값을 입력해야 한다. 또한 '학번' 속성에는 이미 한 번 입력한 속성 값을 중복하여 입력할 수 없다.

       

       

       

      도메인 무결성(Domain Integrity, 영역 무결성)

      📌 도메인 무결성은 주어진 속성 값이 정의된 도메인에 속한 값이어야 한다는 규정이다.

       

      🔔 예) <수강> 릴레이션의 '과목명' 속성에는 영어, 수학, 전산 세 가지만 입력되도록 유효값이 지정된 경우 반드시 해당 값만 입력해야 한다.

       

      💡 기본키(Primary Key) : 기본키는 한 릴레이션에서 특정 튜플을 유일하게 구별할 수 있는 속성이다.
      💡 도메인 : 하나의 애트리뷰트가 취할 수 있는 같은 타입의 원자 Atomic 값들의 집합이다.

       

       

       

      참조 무결성(Referential Integrity)

      📌 참조 무결성은 외래키 값은 Null 이거나 참조 릴레이션의 기본키 값과 동일해야 한다. 즉 릴레이션은 참조할 수 없는 외래키 값을 가질 수 없다는 규정이다.

       

      • 외래키와 참조하려는 테이블의 기본키는 도메인과 속성 개수가 같아야 한다.

      🔔 예) <수강> 릴레이션의 '학번' 속성에는 <학생> 릴레이션의 '학번' 속성에 없는 값은 입력할 수 없다.

      🔔 예) <수강> 릴레이션의 '학번'과 <학생> 릴레이션의 '학번' 속성에는 같은 종류의 데이터가 입력되어 있어야 하며, <학생> 릴레이션의 기본키가 '학번' + '이름' 이었다면 <수강> 릴레이션의 외래키도 '학번' + '이름'으로 구성되어져야 한다.

       

       

       

      사용자 정의 무결성

      📌 사용자 정의 무결성(User-Defined Integrity)은 속성 값들이 사용자가 정의한 제약 조건에 만족해야 한다는 규정이다.

       

      💡 외래키 : 다른 릴레이션의 기본키를 참조하는 속성 또는 속성들의 집합을 의미한다.

       

       

       

      데이터 무결성 강화

      📌 데이터 무결성은 데이터 품질에 직접적인 영향을 미치므로 데이터 특성에 맞는 적절한 무결성을 정의 하고 강화해야 한다.

       

      • 프로그램이 완성되고 데이터가 저장된 상태에서 무결성을 정의할 경우 많은 비용이 발생하므로 데이터베이스 구축 과정에서 정의한다.
      • 데이터 무결성은 애플리케이션, 데이터베이스 트리거, 제약 조건을 이용하여 강화할 수 있다.
        1. 애플리케이션
          • 데이터 생성, 수정, 삭제 시 무결성 조건을 검증하는 코드를 데이터를 조작하는 프로그램 내에 추가한다.
          • 코드를 이용한 복잡한 규칙 등을 검토하는 무결성 검사는 데이터베이스에서 수행하기 어려우므로 애플리케이션 내에서 처리한다.
          • 장점 : 사용자 정의 같은 복잡한 무결성 조건의 구현이 가능하다.
          • 단점 : 소스 코드에 분산되어 있어 관리가 힘들고, 개별적인 시행으로 인해 적정성 검토가 어렵다.
        2. 데이터 베이스 트리거
          • 트리거 이벤트에 무결성 조건을 실행하는 절차형 SQL을 추가한다.
          • 장점 : 통합 관리가 가능하고, 복잡한 요구 조건의 구현이 가능하다.
          • 단점 : 운영 중 변경이 어렵고, 사용상 주의가 필요하다.
        3. 제약 조건
          • 데이터베이스에 제약 조건을 설정하여 무결성을 유지한다.
          • 장점 : 통합 관리 가능, 간단한 선언으로 구현 가능, 변경 용이, 오류 데이터 발생 방지 등이 있다.
          • 단점 : 복잡한 제약 조건의 구현과 예외적은 처리가 불가능하다.

       

      💡 트리거(Trigger) : 데이터베이스 시스템에서 데이터의 입력, 갱신, 삭제 등의 이벤트(Event)가 발생할 때마다 자동적으로 수행되는 절차형 SQL이다.
      💡 이벤트(Event) : 이벤트는 시스템에 어떤 일이 발생한 것을 말하며, 트리거에서 이벤트는 데이터의 입력, 갱신, 삭제와 같이 데이터를 조작하는 작업이 발생했음을 의미한다.

       

       

       

      728x90
      반응형
    상단으로