데이터베이스의 전이 종속성은 함수 종속성을 야기하는 동일한 테이블의 값 사이에 간접적 인 관계입니다. 제 3 정규형 (3NF)의 표준화 표준을 달성하려면 전이 의존성을 제거해야합니다.
본질적으로 전 이적 종속성에는 함수 종속성이있는 세 개 이상의 속성 (또는 데이터베이스 열)이 필요합니다. 즉, 테이블의 열 A는 중간 열 C를 통해 열 B에 의존합니다.
이것이 어떻게 작동하는지 보자.
이진 의존성 예제
작가
Author_ID | 저자 | 책 | 저자 국가 |
---|---|---|---|
Auth_001 | 올슨 스콧 카드 | 엔더스 게임 | 미국 |
Auth_001 | 올슨 스콧 카드 | 엔더스 게임 | 미국 |
Auth_002 | 마가렛 앳 우드 | 손녀의 이야기 | 캐나다 |
위의 AUTHORS 예 :
- 책 → 저자 : 여기, 책 속성에 따라 저자 속성. 책 이름을 알고 있으면 저자 이름을 알 수 있습니다. 하나, 저자 결정하지 않는다 책 왜냐하면 저자는 여러 권의 책을 쓸 수 있기 때문입니다. 예를 들어, 저자 이름 Orson Scott Card를 알고 있기 때문에 우리는 여전히 책 이름을 모른다.
- 저자 → 저자 국가 : 마찬가지로, 저자 속성에 따라 저자 국가 , 그러나 그 반대의 주위에 아닙니다; 국적이 우리가 저자를 결정할 수 있다는 것을 의미하는 것은 아니기 때문에.
그러나이 표에는 전이 의존성이 도입되었습니다.
- 책 → Author_Nationality : 책 이름을 알고 있으면 저자 열을 통해 국적을 결정할 수 있습니다.
전이 의존성 피하기
Third Normal Form을 보장하려면 전이 종속성을 제거하십시오.
Authors 테이블에서 Book 열을 제거하고 별도의 Books 테이블을 만드는 것으로 시작할 수 있습니다.
서적
Book_ID | 책 | Author_ID |
---|---|---|
Book_001 | 엔더스 게임 | Auth_001 |
Book_001 | 마음의 아이들 | Auth_001 |
Book_002 | 손녀의 이야기 | Auth_002 |
작가
Author_ID | 저자 | 저자 국가 |
---|---|---|
Auth_001 | 올슨 스콧 카드 | 미국 |
Auth_002 | 마가렛 앳 우드 | 캐나다 |
이 문제가 해결 되었습니까? 이제 우리의 의존성을 살펴 보자.
BOOKS 테이블:
- Book_ID → 책: 그만큼 책 에 달려있다. Book_ID .
- 이 테이블에는 다른 종속성이 없으므로 우리는 괜찮습니다. 외래 키 Author_ID 기본 키를 통해이 테이블을 AUTHORS 테이블에 연결합니다. Author_ID . 우리는 관계형 데이터베이스의 핵심 설계 인 전이 의존성을 피하기 위해 관계를 만들었습니다.
AUTHORS 표:
- Author_ID → 저자: 그만큼 저자 에 달려있다. Author_ID .
- 저자 → Author_Nationality : 국적은 저자가 결정할 수 있습니다.
- Author_ID → Author_Nationality : 국적은 Author_ID ~을 통해 저자 속성. 우리는 여전히 전이 의존성을 가지고 있습니다.
이 데이터를 정규화하기 위해 세 번째 테이블을 추가해야합니다.
국가
Country_ID | 국가 |
---|---|
Coun_001 | 미국 |
Coun_002 | 캐나다 |
작가
Author_ID | 저자 | Country_ID |
---|---|---|
Auth_001 | 올슨 스콧 카드 | Coun_001 |
Auth_002 | 마가렛 앳 우드 | Coun_002 |
이제 세 개의 테이블을 가지고 외래 키를 사용하여 테이블을 연결합니다.
- BOOK 테이블의 외래 키 Author_ID AUTHORS 테이블에서 책을 저자와 연결합니다.
- AUTHORS 테이블의 외래 키 Country_ID 저자를 COUNTRIES 테이블의 국가에 연결합니다.
- COUNTRIES 테이블에는이 디자인의 다른 테이블에 링크 할 필요가 없으므로 외래 키가 없습니다.
왜 Transitive Dependencies가 나쁜 데이터베이스 설계입니까?
3NF를 보장하기 위해 전이 의존성을 피하는 것의 가치는 무엇입니까? 우리의 첫번째 테이블을 다시 생각해보고 그것이 만드는 이슈들을 보자 :
작가
Author_ID | 저자 | 책 | 저자 국가 |
---|---|---|---|
Auth_001 | 올슨 스콧 카드 | 엔더스 게임 | 미국 |
Auth_001 | 올슨 스콧 카드 | 마음의 아이들 | 미국 |
Auth_002 | 마가렛 앳 우드 | 손녀의 이야기 | 캐나다 |
이러한 종류의 디자인은 데이터 변형 및 불일치에 기여할 수 있습니다. 예를 들면 다음과 같습니다.
- "Children of the Mind"와 "Ender 's Game"이라는 두 권의 책을 삭제했다면 "Orson Scott Card"와 그의 국적을 데이터베이스에서 완전히 삭제할 것입니다.
- 책을 추가하지 않으면 데이터베이스에 새 저자를 추가 할 수 없습니다. 저자가 아직 출판되지 않았거나 자신이 저술 한 책의 이름을 모른다면 어떻게 될까요?
- "Orson Scott Card"가 시민권을 변경 한 경우, 그가 출두 한 모든 기록에서이를 변경해야합니다. 동일한 저자와 함께 여러 레코드를 보유하면 데이터가 부정확해질 수 있습니다. 즉, 데이터 입력자가 자신에 대한 레코드가 여러 개 있다는 것을 인식하지 못하고 하나의 레코드로만 데이터를 변경하면 어떻게됩니까?
- 저자를 완전히 삭제하지 않고 "The Handmaid 's Tale"과 같은 책을 삭제할 수 없습니다.
이는 정규화가 전이 의존성을 피하고 데이터를 보호하며 일관성을 보장하는 몇 가지 이유 일뿐입니다.