책 내용 질문하기
질문입니다.
도서
2020 시나공 정보처리기사 실기 [기본서]
페이지
361,386
조회수
263
작성일
2020-06-25
작성자
탈퇴*원
첨부파일
1) 페이지 361쪽 정규화에 대한 질문입니다. 제가 2정규형의 부분종속과 4정규형의 이행종속의 차이를 모르겠습니다. 예를 들어 365페이지의 문제 6번은 이행종속을 제거하는 것인데, 여기서 수강과목에만 종속되는 담임교수 속성이 있으므로 부분종속이라고 해도 되지않나요? 이해가 잘 가지 않습니다. 2) 386쪽에 인덱스에 대한 질문입니다. 8번 인덱스 대상 테이블 선정기준에서 2번째 줄에 랜덤 액세스가 빈번한 테이블이라고 되어있는데 인덱스는 순차적으로 정리된 것인데 왜 랜덤액세스가 빈번한 테이블에 굳이 인덱스를 사용하는 것인가요? 3) 추가적으로 384쪽에 2번 트리 기반 인덱스에서 제가 트리 구조가 무엇인지는 아는데 인덱스를 저장하는 '블록'이 트리구조를 이루고 있다는 것이 이해가 잘 되지 않습니다. 블록이 정확히 어떤것을 말하는 것인가요? 답변 주시면 정말 감사드리겠습니다!!!
답변
2020-06-26 14:17:20

안녕하세요 길벗수험서 운영팀입니다.

 

[1]

표면적으로는 기본키의 일부가 다른 속성을 종속하는 형태이므로 부분 함수적 종속 처럼 보이지만 차이는 부분 함수적 종속의 경우 기본키의 일부 속성에 의해 다른 속성의 값 하나가 결정되는데, 다치 종속은 기본키의 일부 속성에 의해 다른 속성의 값 여러 개가 결정되는 것을 말합니다. 그래서 다중값 종속이라고도 하죠.

 

예를 들어

359쪽의 <제품주문> 테이블은 (주문번호, 제품번호)에 의해 구별되지만 기본키의 일부인 주문번호에 의해 고객번호와 주소가 결정됩니다.

즉 주문번호 'A345'는 항상 고객번호(100), 주소(서울)이 되죠. 

 

하지만 다치 종속의 형태라면 주문번호 'A345'는 고객번호(100), 주소(서울) 혹은 고객번호(500), 주소(제주)와 같이 항상 고정되어 결정되는 값이 한 개가 아니라 2개 혹은 여러 개 라는 것입니다.

 

360쪽의 <수강_교수> 테이블을 보면 (학번, 과목명)에 의해 구별되지만 기본키의 일부인 과목명에 의해 담당교수가 결정되는데 데이터베이스는 항상 홍길동이 아니라 데이터베이스는 항상 '홍길동' 혹은 '이순신'과 같이 고정되어 결정되는 값이 두 개입니다.

 

이와 같이 여러 값이 결정되는 경우 다치 종속성이라고 하죠.

 

이런 경우 문제는 새로운 과목명을 추가할 때 그 과목명의 담당교수들 각각에 대해 레코드를 추가하는 식의 추가 작업이 필요하므로 이러한 다치 종속성을 제거하여 모든 속성이 기본키에 완전 함수적 종속이 되도록 테이블을 분리하여 정규화 해야 하는 것이죠.

 

 

 

[2]

랜덤 액세스의 반대는 순차 액세스입니다.

랜덤 액세스는 다른 말로 임의 접근 또는 직접 접근이라고 하죠.

테이블을 각 레코드들 1부터 차례대로 접근하는 것이 순차 접근(액세스)라면,

요청에 의해 뭔지 모를(임의의) 레코드를 조회하는 것이 랜덤 액세스에 해당하죠.

 

즉, 요청에 대해 빠르게 응답하기 위해, 접근을 좀더 용이하게 하기 위해 인덱스를 구성하는 것이죠.

요청 시 where 절에 자주 사용되는 속성을 기반으로 인덱스를 잡아둔다면 해당 레코드를 검색하는 것이 더 빨라질테니까요.

 

 

 

[3]

블록은 단순히 인덱스 목록의 묶음입니다.

383쪽 상단의 <인덱스> 테이블을 예로 들었을 때, 키 값을 기준으로 19000미만은 A블록으로 19000이상은 B블록으로 묶어두는 것이죠. 

예를 들어, 상위 노드에는 1만대, 2만대와 같이 지정해두면 19054를 검색한다고 쳤을 때, 각 인덱스를 하나하나 검색할 필요 없이 1만대(2레벨 노드) - 19000대(3레벨 노드) - [검색]  이런 과정을 거치면 검색해야할 인덱스가 줄어들어 더 빠른 조회가 가능해지죠. (1레벨 노드는 루트노드)

 

행복한 하루되세요 :)

  • 관리자
    2020-06-26 14:17:20

    안녕하세요 길벗수험서 운영팀입니다.

     

    [1]

    표면적으로는 기본키의 일부가 다른 속성을 종속하는 형태이므로 부분 함수적 종속 처럼 보이지만 차이는 부분 함수적 종속의 경우 기본키의 일부 속성에 의해 다른 속성의 값 하나가 결정되는데, 다치 종속은 기본키의 일부 속성에 의해 다른 속성의 값 여러 개가 결정되는 것을 말합니다. 그래서 다중값 종속이라고도 하죠.

     

    예를 들어

    359쪽의 <제품주문> 테이블은 (주문번호, 제품번호)에 의해 구별되지만 기본키의 일부인 주문번호에 의해 고객번호와 주소가 결정됩니다.

    즉 주문번호 'A345'는 항상 고객번호(100), 주소(서울)이 되죠. 

     

    하지만 다치 종속의 형태라면 주문번호 'A345'는 고객번호(100), 주소(서울) 혹은 고객번호(500), 주소(제주)와 같이 항상 고정되어 결정되는 값이 한 개가 아니라 2개 혹은 여러 개 라는 것입니다.

     

    360쪽의 <수강_교수> 테이블을 보면 (학번, 과목명)에 의해 구별되지만 기본키의 일부인 과목명에 의해 담당교수가 결정되는데 데이터베이스는 항상 홍길동이 아니라 데이터베이스는 항상 '홍길동' 혹은 '이순신'과 같이 고정되어 결정되는 값이 두 개입니다.

     

    이와 같이 여러 값이 결정되는 경우 다치 종속성이라고 하죠.

     

    이런 경우 문제는 새로운 과목명을 추가할 때 그 과목명의 담당교수들 각각에 대해 레코드를 추가하는 식의 추가 작업이 필요하므로 이러한 다치 종속성을 제거하여 모든 속성이 기본키에 완전 함수적 종속이 되도록 테이블을 분리하여 정규화 해야 하는 것이죠.

     

     

     

    [2]

    랜덤 액세스의 반대는 순차 액세스입니다.

    랜덤 액세스는 다른 말로 임의 접근 또는 직접 접근이라고 하죠.

    테이블을 각 레코드들 1부터 차례대로 접근하는 것이 순차 접근(액세스)라면,

    요청에 의해 뭔지 모를(임의의) 레코드를 조회하는 것이 랜덤 액세스에 해당하죠.

     

    즉, 요청에 대해 빠르게 응답하기 위해, 접근을 좀더 용이하게 하기 위해 인덱스를 구성하는 것이죠.

    요청 시 where 절에 자주 사용되는 속성을 기반으로 인덱스를 잡아둔다면 해당 레코드를 검색하는 것이 더 빨라질테니까요.

     

     

     

    [3]

    블록은 단순히 인덱스 목록의 묶음입니다.

    383쪽 상단의 <인덱스> 테이블을 예로 들었을 때, 키 값을 기준으로 19000미만은 A블록으로 19000이상은 B블록으로 묶어두는 것이죠. 

    예를 들어, 상위 노드에는 1만대, 2만대와 같이 지정해두면 19054를 검색한다고 쳤을 때, 각 인덱스를 하나하나 검색할 필요 없이 1만대(2레벨 노드) - 19000대(3레벨 노드) - [검색]  이런 과정을 거치면 검색해야할 인덱스가 줄어들어 더 빠른 조회가 가능해지죠. (1레벨 노드는 루트노드)

     

    행복한 하루되세요 :)

· 5MB 이하의 zip, 문서, 이미지 파일만 가능합니다.
· 폭언, 욕설, 비방 등은 관리자에 의해 경고없이 삭제됩니다.