2009-06-05 4 views
2

언젠가 언젠가 2NF가 필요하지 않을 수도 있습니다. 이 2NF하지만 난 우리가 그들을 쿼리 할 때이 간단하고 빠르게되기 때문에 옵션 1이 더 생각하기 때문에 옵션 2와 같은왜 2NF가 필요합니까?

Option 1. ORDERS {orderId (pk), custId (fk), total, date, status, ...} 
    PARTS {orderId (pk), partsId (pk), qty, unitPrice, description, ...} 

Option 2. ORDERS {orderId (pk), custId, total, date, status, ...} 
    ORDER_PARTS {orderId (pk)(fk), partsId (pk)(fk), qty, ...} 
    PARTS {partsId (pk), unitPrice, description, ...} 

대부분의 사람들은, 나는 생각한다. 왜 이런 경우 2NF가 필요한가요?

+3

정말이 질문을하는 경우 사용자 이름에 "DBA"가 있어야한다고 생각하지 않습니다. 5 년 후 DBA가 될 것으로 예상하지 않는다면 :-) – paxdiablo

+0

예, 5 년 후. 지금은 아니야. 지금 막 배울 것입니다 – 5YrsLaterDBA

답변

6

처음 DBA로, 모두을 세 번째 정규 형식으로 입력해야합니다. 즉, 행의 모든 ​​열은 다음에 따라 달라집니다.

  • 키 (1NF).
  • 전체 키 (2NF).
  • 키 (3NF) 외에는 아무것도 없습니다.

경험상 여러 가지 이유로 (일반적으로 속도가 빠름) 2NF로 되돌리기를 선택할 수는 있지만 초보자로서 걱정할 필요는 없습니다.

+0

아멘. 완전히 동의했다. +1. –

+0

정상적인 형태에 대한 간략한 설명은 +1! – eKek0

+2

"키, 전체 키 및 키 이외의 모든 것이 Codd에 도움이됩니다." :-) –

3

옵션 1을 사용하면 주문에 속하지 않는 한 파트가 존재하지 않으므로 두 번째 일반 양식을 원합니다.

+0

당신 말이 맞습니다. 그러나 때로는 사실입니다. 우리가 새로운 주문을 받았을 때, 우리에게 새롭고 기록이없는 부분이있을 수 있습니다. – 5YrsLaterDBA

1

옵션 1에서 사용자가 파트의 설명을 변경하려는 경우 해당 파트와 연관된 모든 주.에서 옵션을 변경해야합니다. 나쁜 냄새를 느끼지 않니?

+0

당신도 맞습니다. – 5YrsLaterDBA