2011-10-16 3 views
2

관계 R이 BCNF와 3NF에 있는지 어떻게 알 수 있습니까?관계형 데이터베이스의 BCNF/3NF

나는 교과서를 읽고 있는데, 당신이보고있는 세 가지 주요 특성이 있다고 말하고 있지만, 그들이 말하는 것을 이해하는 데 어려움을 겪고 있거나 적어도 그들이 말하는 것을 적용 할 때 관계와 FD가 주어진다.

3 속성 : 는 속성 A를 릴레이션 R을 감안할 때, 및 F의 모든 FD X⟶A를 들어, R의 속성의 일부를 X, 다음 문 중 하나에 해당 :

  • A ∈ X; 즉, 사소한 FD가
  • X는
  • A가 상위 두 BCNF 대응 R

일부 키의 일부이고 퍼키이다 ("X에서 발견되는"의미 ∈) 인 3NF는 세 번째를 포함합니다.

+0

시작 - 나는 의심 그것들은 표준 정리에서 나온 것이고 그것들을 나열하면 응답에 초점을 맞출 수 있습니다. –

+0

세 번째 문구 - "A는 일부 R 키의 일부입니다."- 3NF보다 2NF처럼 보입니다. http://en.wikipedia.org/wiki/Second_normal_form을 참조하십시오. –

답변

4

SQL Antipatterns by Bill Karwin에는 303 페이지의 BCNF 및 3NF에 대한 좋은 예가 나와 있는데, 이는 약간 복잡하지만 지금까지 읽은 차이점에 대한 설명보다 더 간결하게 차이점을 지적합니다.

예를 들어, 우리는 세 가지 태그 유형이 있다고 가정 : 버그의 에 미치는 영향을 설명 태그, 버그가 영향을 서브 시스템에 대한 태그 및 태그 버그에 대한 수정을 설명 . 각 버그의 크기는 이어야하며 최대 하나의 특정 유형 태그 만 사용해야합니다. 우리의 후보 키는 bug_id 더하기 tag 일 수 있지만 bug_id 더하기 tag_type 일 수도 있습니다. 열의 한 쌍은 모든 행을 개별적으로 처리 할만큼 충분히 구체적입니다.

bug_id tag  tag_type 
------------------------ 
1234 crash impact 
3456 printing subsystem 
3456 crash impact 
5678 report subsystem 
5678 crash impact 
5678 data  fix 

이 책은 다음 BCNF 만족 두 테이블에 (3NF을 만족)이 단일 테이블 변경 : 포스트의 속성을 나열하여

bug_id tag 
---------- 
1234 crash 
3456 printing 
3456 crash 
5678 report 
5678 crash 
5678 data 

tag  tag_type 
------------------ 
crash  impact 
printing subsystem 
report subsystem 
data  fix 
+2

약간의 손이 여기에 적용된 것처럼 느껴집니다. 당신은 {id, type -> tag; tag -> type}로 구분하고 3NF 관계 (id, tag, type)에서 BCNF 관계 (id, tag) 및 (tag, type)로 분해합니다. 이 분해는 무손실 조인이지만 FD (id, type -> 태그)를 보존하지 않았습니다. 이전에는 (~ 3456, report) 값을 삽입 할 수 있었지만 주요 제약 때때로 그것은 받아 들일 수 있지만, 당신은 제약 조건을 완화했다는 것을 알고 있어야합니다. – beldaz

관련 문제