2011-01-06 5 views
0

누군가 다음 테이블은 두 번째 데이터베이스 정규화에 적합하지 않습니다. 왜 그런지 몰라? 나는 데이터베이스 디자인의 초보자 다. 나는 3NF의 튜토리얼을 읽었다. 그러나 2NF와 3NF에, 나는 그들을 잘 이해할 수 없다. 누군가 나를 위해 그것을 설명 할 수있을 것으로 기대합니다. 감사합니다,데이터베이스 ---- 데이터베이스 정규화

+0

이것은 아주 사소한 테이블 디자인입니다.이 숙제입니까? –

답변

1

예 : 그 테이블은 두 번째 데이터베이스 정규화에 적합하지 않습니다 (예제 데이터와 함께, 나는 C가 A에만 의존한다고 가정합니다). (Wikipedia) 키 후보

No non-prime attribute in the table is functionally dependent on a 

부분 집합이 그래서 C는 기본 키의 하위 집합입니다 "A"에 따라 달라집니다 : 두 번째 정규화 형식은해야합니다. 기본 키는 특별 수퍼 키입니다. (dportas는 그것이 후보 키라고 불릴 수 없다는 사실을 지적한다.

두 번째 정규화 양식에 대해 자세히 설명합니다. 쉽게 이해할 수 있도록 예제를 약간 변형 시키십시오. 테이블 CUSTOMER(customer_id, customer_name, address)이 있다고 가정하십시오. 슈퍼 키는 튜브를 고유하게 결정하는 속성의 하위 집합입니다. 이 경우 3 개의 수퍼 키가 있습니다. (customer_id); (customer_id, customer_name); (customer_id, customer_name, 주소). (고객 이름은 2 인으로 동일 할 수도 있음)

귀하의 경우 (고객 ID, 고객 이름)을 기본 키로 결정했습니다. 그것은 두 번째 양식 규칙을 위반했다. 이는 데이터베이스에서 튜브를 고유하게 결정하기 위해 customer_id 만 필요하기 때문입니다. 이론적 인 적합성을 위해서 기본 키 (후보 키가 아님)의 선택에서 제기 된 문제는 중복성을 표시하는 데 동일한 인수를 적용 할 수 있지만 마찬가지입니다. 유용한 예제 here을 찾을 수 있습니다.

모든 비 프라임 속성이

이 예를 하나 들어 보자 테이블의 모든 후보 키에 비 이적으로 의존 :

세 번째 정상 형태의 것을 말한다. 두 번째 양식에 맞게 이전 표를 변경하면 customer_id가 기본 키인 CUSTOMER(customer_id,customer_name, city, postal_code) 표가 생깁니다.

분명히 "우편 번호"는 고객의 "도시"에 달려 있습니다. 이것은 세 번째 규칙을 위반 한 것입니다 : 우편 번호는 도시에 따라 다르며, 도시는 customer_id에 따라 다릅니다. 즉, postal_code는 전이 적으로 customer_id에 따라 달라 지므로 테이블이 세 번째 표준 양식에 맞지 않습니다.

이를 수정하려면 전이 종속성을 제거해야합니다. 그래서 테이블을 두 테이블로 나눕니다 : CUSTOMER(customer_id, customer_name, city)CITY(city, postal_code). 이렇게하면 동일한 도시에 튜브 수가 너무 많아서 중복 될 수 없습니다. & postal_code.

+0

@runeveryday : 제 영어 실력이 좋지 않다는 것을 알고 있습니다. 따라서 모호한 문제가 있는지 물어보십시오. –

+1

(고객 _ ID); (customer_id, customer_name); (customer_id, customer_name, address)는 서로의 서브 세트이기 때문에 모두 후보 키가 될 수 없습니다. 응시자 키는 최소한이어야합니다. – sqlvogel

+0

@dportas : 실제로 데이터베이스 용어는 다른 저자의 책에서 동일하지 않습니다. –

1

여기에 만족해야하는 종속성을 밝히기 전에는 사용자의 질문에 올바르게 대답 할 수 없습니다. 같은 이름 (pk)을 가진 두 개의 속성이있는 것처럼 보입니다.이 경우이 테이블은 관계로 적합하지 않기 때문에 1NF를 충족시키지 못합니다.

0

내 노트를 쉽게 따라갈 수 있습니다.각 단계는 많은 예제로 자세히 설명되어 있습니다 : Normalization. 사이트에서 "정규화"용어를 검색하십시오.

+0

스택 오버플로에 오신 것을 환영합니다! 이 링크가 질문에 대답 할 수는 있지만 답변의 핵심 부분을 여기에 포함시키고 참조 용 링크를 제공하는 것이 좋습니다. 링크 된 페이지가 변경되면 링크 전용 답변이 유효하지 않게 될 수 있습니다. 이 기사를 보아라 : [나는 좋은 대답을 어떻게 쓰는가?] (http://stackoverflow.com/help/how-to-answer). – ByteHamster

관련 문제