2012-06-29 2 views
1

위키 피 디아의 Database Normalization 2NF에 대한 기사를 Wikipedia에서 연구했습니다. 마지막 예제를 통해 토너먼트 우승자를 만났습니다. 표에는 전이 의존성이 있기 때문에 2NF에 포함되어 있지 않으며 3NF로 복원하고 데이터 손상 가능성을 제거하기 위해 추가 최적화가 필요합니다 (추가 테이블로 분할하는 것과 같은). 다른 사람이 다른 기록에 다른 생년월일로 표시되는 것을 같은 사람에게 보여주기 위해 어떤 유형의 '부패'가 일어날 수 있는지 말해 줄 수 있습니까?RDBMS에서 전이 종속성의 문제점은 무엇입니까?

답변

3

이 행 삽입 한 번 상상해

Indiana Invitational 1998 Al Fredrickson 21 July 1975 

를하고 나중에이 (예를 들어, 실수로) 삽입 :

Des Moines Masters  1999 Al Fredrickson 20 June 1985 

당신이 볼 수 있듯이, 같은 사람이 다른 생일에있다 이 테이블. 그 Wikipedia 기사가 말하는 것은 생일이 기본 키가 아닌 사람에 달려 있다는 것입니다. 즉, 그 사람은 반복 할 수 있으며주의를 기울이지 않으면 종속 속성 (예 : 생년월일)이 변경 될 수 있습니다.

당신이해야 할 일은 사람 이름이 기본 속성으로 다른 테이블을 만들고 그 테이블 (예 : 사람의 생년월일)로 종속 데이터를 이동하는 것입니다. 이 방법을 사용하면 여분의 (name, birthday) 튜플을 피할 수 있으며 손상을 방지하고 메모리를 절약 할 수 있습니다.

+0

글쎄, 그게 핵심이야. 두 개의 토너먼트는 Al Fredrickson이라는 이름을 가진 두 명의 다른 사람들이 이길 수 있습니다. 맞습니까? 그렇다면 왜 그것이 오류가되어야합니까? 둘째, 사용자 입력 데이터가 백만 가지 방법으로 손상 될 수 있습니다. 왜 각자 NF를 고안해야합니까? 중복 레코드를 삽입하는 것은 치명적이므로 첫 번째 1NF는이를 금지합니다. 하지만 사용자 데이터가 부정확한지 확인하기 위해 NF가 있어야하는 이유는 무엇입니까? – SexyBeast

+3

정규화가 수행하는 작업 - 데이터의 중복성 및 종속성 제거. 서로 다른 생년월일의 Al Fredricksons가 2 명일 수도 있지만, 승자와 함께 테이블에 보관하는지 알 수는 없습니다. 우승자 테이블에서 사용할 수있는'PERSON' 엔티티를 갖는 것이 더 좋습니다. –

+1

정확히 N 서쪽이 말합니다. 더 나은 설계 (더 높은 일반 형식)로 중복을 제거하면 사용자 입력을 수동으로 확인하는 대신 RDBMS에 남겨 두는 것을 의미합니다. 아마도 더 중요한 효과는 성능입니다. 사람들과 소지품의 거대한 데이터베이스를 상상해보십시오. 'Person','Thing'과'BelongsTo' 테이블을 구별하지 않는다면 많은 비용과 시간을 절약 할 수있는 반복 된 데이터를 가질 수 있습니다. – Shahbaz

관련 문제