책 내용 질문하기
정규화 질문입니다.
도서
2019 시나공 정보처리산업기사 필기
페이지
96
조회수
645
작성일
2019-04-18
작성자
탈퇴*원
첨부파일

체크한 두개가 내용이 모순되는것 같은데 , 그전에 여기서 말하는 키가 후보키인가요?

아 헷갈리네요.ㅜ

그리고 모든 bcnf가 종속성을 보존하는 것은 아니다를 혹시 풀어서 설명해주시면 넘 감사하겠습니다ㅜ. 종속성 보존이라는게 어떤의미인지 와닿지가 않네요. 


첨부 이미지 

답변
2019-04-19 11:50:22

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

 

먼저 체크하신 부분에 대한 설명입니다.

 

 

학번 과목명 담당교수
171746 데이터베이스 홍길동
171747 네트워크 유관순
171748 인공지능 윤봉길
171749 데이터베이스 홍길동
171747 데이터베이스 이순신
171749 네트워크 유관순

 

위의 테이블을 보세요. 담당교수는 앞의 (학번, 과목명)의 종속자입니다. 완전함수적 종속이죠. 한 학번에 여러명의 교수가 배치될 수 있고(171747), 하나의 과목에도 여러명의 교수가 배치될 수 있으니까요(데이터베이스).

 

하지만 두번째 체크는 어떤 속성도 키가 아닌 속성에 대해 완전 종속할 수 없다는 제약조건을 어기고 있습니다. 담당교수 -> 과목명 이 성립되어 버리기 때문이죠.

이 경우 테이블을 분리하여 해당 제약조건을 준수하게 만들어 버리면 됩니다.

 

이렇게랑

 

학번 담당교수
171746 홍길동
171747 유관순
171748 윤봉길
171749 홍길동
171747 이순신
171749 유관순

 

이렇게 말이죠.

 

담당교수 과목명
홍길동 데이터베이스
이순신 데이터베이스
윤봉길 인공지능
유관순 네트워크


위와 같이 분리하면 두 테이블 모두 완전 함수적 종속을 만족하며(첫번째는 모두 키이니 만족했다고 가정합니다), 키가 아닌 속성(과목명)을 결정자로 갖는 필드가 존재하지 않으니 BCNF에 해당하게 됩니다. 

 

 

-----

종속성의 보존하지 않는다는 것은 3정규형의 종속관계

(학번, 과목명) -> 담당교수

담당교수 -> 과목명

 

이것이 해제된다는 것을 의미합니다.

위에서는 BCNF를 만들기 위해 학번, 담당교수 필드를 가진 테이블과, 담당교수, 과목명 필드를 가진 테이블을 만들었습니다. 여기서 첫번째 테이블과 두번째 테이블의 담당교수을 연결하게 되면 기존의 종속성이 보존되게 되죠.

하지만 이렇게 만들면 어떻게 될까요.

 

테이블1은 학번, 과목명

테이블2는 학번, 담당교수

 

이렇게 분리하게 되도 BCNF를 충족하게 되지만 학번으로 두 테이블을 연결해도 기존의 종속 관계를 찾을 수 없게 됩니다.

(예를 들어, 테이블1에서 171747 학번의 과목명은 네트워크, 데이터베이스 입니다. 테이블2에서 171747 학번의 담당 교수는 유관순, 이순신입니다. 각 과목을 누가 담당하는지 특정지을 수 없기 때문에 기존과 동일한 종속관계는 찾을 수 없게 됩니다.)

 

이 것이 종속성을 보존하지 않고 BCNF로 변경하는 방법입니다.

(비효율적이고, 사용되는 경우가 거의 없습니다.)

 

행복한 하루되세요 :)

  • 관리자
    2019-04-19 11:50:22

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

     

    먼저 체크하신 부분에 대한 설명입니다.

     

     

    학번 과목명 담당교수
    171746 데이터베이스 홍길동
    171747 네트워크 유관순
    171748 인공지능 윤봉길
    171749 데이터베이스 홍길동
    171747 데이터베이스 이순신
    171749 네트워크 유관순

     

    위의 테이블을 보세요. 담당교수는 앞의 (학번, 과목명)의 종속자입니다. 완전함수적 종속이죠. 한 학번에 여러명의 교수가 배치될 수 있고(171747), 하나의 과목에도 여러명의 교수가 배치될 수 있으니까요(데이터베이스).

     

    하지만 두번째 체크는 어떤 속성도 키가 아닌 속성에 대해 완전 종속할 수 없다는 제약조건을 어기고 있습니다. 담당교수 -> 과목명 이 성립되어 버리기 때문이죠.

    이 경우 테이블을 분리하여 해당 제약조건을 준수하게 만들어 버리면 됩니다.

     

    이렇게랑

     

    학번 담당교수
    171746 홍길동
    171747 유관순
    171748 윤봉길
    171749 홍길동
    171747 이순신
    171749 유관순

     

    이렇게 말이죠.

     

    담당교수 과목명
    홍길동 데이터베이스
    이순신 데이터베이스
    윤봉길 인공지능
    유관순 네트워크


    위와 같이 분리하면 두 테이블 모두 완전 함수적 종속을 만족하며(첫번째는 모두 키이니 만족했다고 가정합니다), 키가 아닌 속성(과목명)을 결정자로 갖는 필드가 존재하지 않으니 BCNF에 해당하게 됩니다. 

     

     

    -----

    종속성의 보존하지 않는다는 것은 3정규형의 종속관계

    (학번, 과목명) -> 담당교수

    담당교수 -> 과목명

     

    이것이 해제된다는 것을 의미합니다.

    위에서는 BCNF를 만들기 위해 학번, 담당교수 필드를 가진 테이블과, 담당교수, 과목명 필드를 가진 테이블을 만들었습니다. 여기서 첫번째 테이블과 두번째 테이블의 담당교수을 연결하게 되면 기존의 종속성이 보존되게 되죠.

    하지만 이렇게 만들면 어떻게 될까요.

     

    테이블1은 학번, 과목명

    테이블2는 학번, 담당교수

     

    이렇게 분리하게 되도 BCNF를 충족하게 되지만 학번으로 두 테이블을 연결해도 기존의 종속 관계를 찾을 수 없게 됩니다.

    (예를 들어, 테이블1에서 171747 학번의 과목명은 네트워크, 데이터베이스 입니다. 테이블2에서 171747 학번의 담당 교수는 유관순, 이순신입니다. 각 과목을 누가 담당하는지 특정지을 수 없기 때문에 기존과 동일한 종속관계는 찾을 수 없게 됩니다.)

     

    이 것이 종속성을 보존하지 않고 BCNF로 변경하는 방법입니다.

    (비효율적이고, 사용되는 경우가 거의 없습니다.)

     

    행복한 하루되세요 :)

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