2010-12-07 5 views
1

데이터베이스를 디자인 할 때 항상 네 번째 정규 형식을 사용해야합니까?데이터베이스의 세 번째 정상적인 형식입니까?

세 번째 정규형이 내 비즈니스 도메인에 더 가깝다고 느낍니다.

예를 들어 PartNumber 인 표가 있습니다. 내 비즈니스 도메인에서 고유 키이므로 두 부분의 숫자가 같아서는 안됩니다. 그러나 이것은 VARCHAR이며 VARCHAR에 기본 키를 넣은 다음이를 다른 테이블에 외래 키로 연결하는 것은 큰 냄새입니다.

어디에서나 자동 증가 ID를 사용해야합니까? 나는 정말로 요점을 보지 않으며 코드를 많이 복잡하게 만든다.

답변

1

데이터베이스에 따라 다릅니다. varchar 필드를 PK로 사용하면 MySQL의 DB 저장소 및 인덱스 공간을 낭비합니다 (예 :). 부품 번호에 대한 테이블 및 고유 정수 ID를 갖는 것이 덜 순수한 것처럼 보일 수 있지만 성능면에서 때때로 이러한 사항이 필요합니다.

(그리고 또한, 나는이 비즈니스 로직에서 가능한 것 같지 않다 생각하지만 당신이 한 자리에 필요한 경우 제품 번호를 업데이트 할 수 없습니다.)

+0

또한 ID는 절대로 변경해서는 안됩니다. –

1

를 귀하의 질문에 4NF에 대해 묻는 동안, 당신의 특별한 상황은 그렇지 않습니다. VARCHAR 필드를 기본 키로 사용하면 이 잘못된이 아니므로 상대적으로 작 으면 대리 키 대신 해당 키를 사용하는 것이 좋습니다.

위로 4NF로 - Wikipedia's example에서 이것은 많은 시간이 단지 자연스럽게 자리 잡을 수있는 것으로 보입니다. 확실히 4NF를 위해 애쓰는 것은 상처 입을 수 없습니다. 동시에 비정규 화가 그 자리를 차지합니다.

1

사용자가 부품 번호를 편집 할 수있게합니까? 그렇다면 기본 키로 사용하지 않는 것이 좋습니다. 일반적으로 DB를 통해 변경된 PK를 복제하면 비용이 많이 들기 때문에 PK를 사용자가 편집 할 수 없습니다.

또한 두 개의 부품이 같은 번호를 갖지 않거나 두 개의 부품이 같지 않아야합니까? 활성 부품의 번호가 같을 수 있습니까? 그것이 후자라면, 당신은 당신이 동일한 두 개의 부품 번호로 끝날지도 모른다는 충분한 역사를 유지할 필요가 있습니까?

2

데이터베이스가 적어도 Boyce-Codd Normal Form 또는 이상적으로 Fifth Normal Form에 있어야합니다. 3NF는 5NF가 만족하지 않는 보존이 중요한 종속성이있는 경우에만 고려하십시오.

4NF는 varchar 또는 정수를 키에 사용하는지 여부와 관계가 없으며 왜 그렇게 생각하는지 확신 할 수 없습니다.

1

데이터를 정규화하는 방법을 배우는 데 몇 주가 걸립니다. 정규화 규칙을 무시할시기를 배우려면 몇 달 또는 몇 년이 걸립니다. 물론 정규화 규칙을 무시하면 결과가 발생합니다. 정규화를 철저히 배우면 그 결과가 있음을 알 수 있습니다.

때로는 주어진 정상적인 형태를 따르지 않는 경우의 결과는 다른 디자인 패턴을 따르는 이점과 비교해 가벼운 경우가 있습니다. 예를 들어, OLAP 데이터베이스 또는 데이터웨어 하우스를 구축 할 때 스타 스키마 또는 스노우 플레이크 스키마는 정규화 된 스키마보다 생산성이 높은 경우가 많습니다.

OLTP 데이터베이스의 경우, Boyce-Codd 표준 형식을 목표로하고 경향이 있으며, 4 번째 또는 5 번째 정규형에서 벗어나서 수정 된 예외를 처리합니다. 그러나 그것은 실제로 사건에 달려 있습니다.

관련 문제