안녕하세요 길벗수험서 운영팀입니다.
[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레벨 노드는 루트노드)
행복한 하루되세요 :)