데이터베이스가 세 번째 정규 형식으로 정규화되었는지 확인하는 도구가 있습니까?


20

나는 최근 정규화에 대해 배웠고 새로운 스키마를 구현할 때 그것이 얼마나 중요한지 이해했습니다.

내 데이터베이스가 2NF 또는 3NF를 준수하는지 어떻게 확인할 수 있습니까?

수동 검토는 확실한 옵션이지만 여기서 자동 도구를 찾고 있습니다.

포인트 앤 클릭 도구를 찾고 있지 않습니다. 테이블 3NF를 준수하기 위해 가능한 최적화를 강조하는 도구가 더 있습니다. 좋은 샘플 데이터 및 / 또는 열 이름의 의미 론적 분석을 기반으로 한 통계를 사용할 수 있습니다.


1
그런 도구가 존재하지 않기를 바랍니다. 2NF / 3NF는 시행 할 필요가 없습니다. 스키마 / 모델을 설계 할 때는 실용성과 성능을 고려해야합니다. 일반적으로 xNF를 창 밖으로 내
보냅니다.

2
정규화가 실제로 사용되지 않는다는 것을 의미합니까? 나는 그것을 출발점으로 사용할 계획이며 성능이 느려지면 비정규 화를 고려할 것입니다.
ack__

3
스키마 디자인은 과학보다 예술에 가깝습니다. 따라야 할 기본 규칙이 있지만, 일단 충분히하면 효과가있는 것과 그렇지 않은 것에 대해 좋은 느낌을 받기 시작합니다. 장인.
datagod

나는 Phil에 동의하지 않습니다. 정규화는 때때로가는 길입니다. 다른 경우에는 스타 스키마가 더 좋습니다. 그것은 당신이하는 일에 달려 있습니다. 자동화가 가치가 있기 전에 엄청난 양의 테이블이 필요합니다.
Walter Mitty

답변:


24

정규화는 실제 세계에서 절대적으로 사용됩니다. 그리고 3NF가 세 번째 일 뿐이라는 것을 알고 있기를 바랍니다. 현재는 8입니까? 그러나 3NF는 쉬운 목표가되어야합니다.

그러나 ... 나는 그런 도구가있을 수 없다고 말하려고했다.

기술적으로 정규화는 각 테이블의 속성입니다. 주어진 데이터베이스 내에서 다른 테이블은 다른 수준의 정규화를 가질 수 있습니다.

각 표는 사실 ... 때때로 외래 키를 포함하여 특정 유형의 물건 (사람, 계정, 주문, 배송, 품목, 위치)에 대한 사실을 나타냅니다.

정규화는 테이블에 사실이 얼마나 정확하고 효율적으로 표현되는지와 모호하고 중복 된 데이터 패턴을 방지하는 테이블 디자인 기능과 관련이 있습니다.

따라서 자동화 된 툴의 범위를 벗어난 실제 사실에 대한 이해가 필요합니다.

Q: Is a table with { student, subject, instructor } in 3NF?
A: What are students, subjects and instructors?

모든 강사가 모든 과목을 가르치고 각 학생이 각 강사의 각 과목에서 하나 이상의 코스를 수강 할 수있는 세계에서,이 테이블은 실제로 3NF에 있다고 할 수 있습니다. 실제로이 테이블에 대한 3NF의 주장은 터무니 없습니다.

3NF가 아니라는 것을 이해하려면 그것이 나타내는 사실의 본질을 이해해야합니다. 실제로,이 테이블은 (다른 이유로) 과목과 강사가 학생과 아무런 관련이없는 방식으로 서로 연결되어 있기 때문에 3NF가되지는 않습니다. 강사가 데이터베이스의 다른 곳에 저장된 과목을 가르치는 코스가있는 경우 다른 테이블에서 외래 키 대신 두 값을 모두 복사하여 학생이 코스에 등록했음을 나타내는 이유는 무엇입니까? 강사가 교체되면 여러 장소에서 여러 레코드를 변경해야합니다.

데이터베이스가 정규화 될수록 실제 세계와 본질적으로 일관성이 높아지고 데이터베이스의 사실이 실수로 사실이되기가 더 어려워집니다. 데이터베이스 디자인은 예술이지만 과학이기도합니다.

비록 그가 쓴 모든 내용을 한눈에 볼 수는 없지만 Chris Date의 책, 데이터베이스 디자인 및 관계 이론 : 일반 형식 및 모든 재즈 를 추천합니다. 관계형 모델의 기본 이론에 대한 세부적인 내용을 다루고 있습니다.


2
이 자세한 답변에 감사드립니다. 그러나 예제를 따르면 샘플 데이터를 분석하는 도구가 "강사"값이 많이 반복되고 다른 테이블에도 나타나는 것을 감지 할 수 있으므로 외래 키 또는 기타 변경 사항이있을 수 있습니다. 이 테이블을 3nf 호환으로 만들거나 뭔가 빠졌습니까?
ack__

2
그러나 키워드는 여전히 "추천"입니다. 도구는 명백한 중복성을 찾아서 구조적 변화를 제안 할 수 있지만, 여전히 그러한 도구를 구별하기 위해서는 진정한 중복성과 우연의 상관 관계가 나타나지 않을 것입니다. 데이터의 실제 특성에 대한 지식이 필요합니다.
Michael-sqlbot

@ack__ : 세 번째 정규 형식인지 아닌지는 관계 또는 관계 집합이 아닌 관계의 속성입니다. 따라서 외래 키 관계를 설정하면 세 번째 정규 형식과 관련이 있음을 알 수 없습니다.
miracle173

더 큰 문제는 다중 열 기능 종속성을 결정하는 것이 문제가 있다는 것입니다. 값이 같을 수는 있지만 다른 엔터티를 나타내는 경우 (예 : 복합 키가 관련된 경우) 표를 고려하십시오 (address_text, city, state_province, mail_code, country). 이제 이것은 정규화되지 않았습니다. (도시, state_province)-> (국가). 따라서 완전히 정규화하려면이 테이블을 최소한 3 개의 테이블, 4 개 (mail_code handling!)로 나누어야하지만 복합 키는이를 즉시 감지하기 어렵습니다. 또한 comp. 열쇠는 nf의 아이디어의 열쇠이므로 무시하지 마십시오!
Chris Travers

"학생이 한 과목에서만 코스를 수강 할 수 있고 모든 강사가 모든 과목을 가르 칠 수있는 세상에서이 테이블은 실제로 3NF에 있다고 말할 수 있습니다." 이 테이블의 핵심은 (학생, 강사) 3NF를 깨뜨리지 않을 것입니까? 모든 과목을 가르치는 모든 교사는 우리에게 어떤 도움을 줍니까?
Drew Verlee

5

관계 이론을 개발할 때 공식적인 방법을 사용하는 것의 일부는 자동화 될 수있는 절차를 개발하는 것이 었습니다. CJ Date가 곧 나올 것이라고 확신하며 그의 데이터베이스 시스템 소개 에서 말합니다 .

1980 년대 후반 또는 1990 년대 초에 출시 된 여러 CASE 도구는 ER 다이어그램을 분석하거나 샘플 데이터의 통계 분석을 통해 가능한 모든 5NF 스키마를 도출 할 수 있습니다.

Visio Enterprise Architect (제 생각에)는 이러한 라인을 따라 비교적 최신 도구입니다.


좋은. 실제로 스키마를 분석하는 두 가지 방법 (ER 다이어그램 및 샘플 데이터 분석)을 찾고있었습니다. Visio 이외의 다른 최신 소프트웨어를 알고 있습니까? 나는 아직 라이센스가 없다.
ack__

1
그러나 ER 다이어그램은 본질적으로 객체 모델 다이어그램입니다. 기존 데이터베이스를 가져 와서 데이터베이스에서 정규화하는지 확인하는 것과는 다릅니다.
Chris Travers

2
샘플 데이터를 사용하여 테이블을 분석하고 정규화를위한 제안은 Access의 기능이며 초기 버전에서는 잘 기억하고 있습니다.
ypercubeᵀᴹ September

@Chris : 예, 의미 분석 전용 ER 다이어그램을 참조하고있었습니다.
ack__

@ ypercube : 팁 주셔서 감사합니다, 액세스를 살펴 보겠습니다.
ack__


2

나는 당신이 그것을 할 수있는 도구를 작성할 수 있다면 여전히 수동 검토가 필요하다고 생각합니다. 정상적인 형태는 기능적 의존성에 기초하여 정의되며 단순한 데이터 검사만으로는 결정될 수 없습니다. 다시 말해서, 기능적 의존성이 존재 하는지를 결정하기 위해서는 연역적 논리보다는 유도적인 문제이다.


실제로 수동 검토가 필요하지만 도구가 자동으로 완전히 수행 할 것으로 기대하지는 않습니다. 그러나 DB의 기존 데이터 (적어도 샘플) 및 / 또는 field name / type 필드를 분석하여 대부분의 작업을 자동화 할 수 있다고 확신합니다.
ack__ 2018 년

1
방법? 정규화는 결합 종속성 및 기능 종속성에 정의됩니다. 기능 종속성은 기본적으로 다음과 같이 쉽게 정의됩니다. 수 퍼키의 모든 가능한 값에 대해 기능 종속성에 정확히 하나의 값이 있습니다. 현재 세트에 대해 기능적 종속성으로 보이는 것을 가지고 있기 때문에 데이터 검토를 자동화하여 얻을 수는 없습니다. 이는 새로운 키가 준수한다는 의미는 아닙니다. 그것은 오래된 상관 관계 대 인과 ​​관계와 매우 유사합니다. 현재 데이터베이스에있는 것을 관찰하여 기능적 종속성을 유도 할 수 없습니다.
Chris Travers

2
최소한 도구는 관계가 존재할 수 있다고 제안 할 수 있습니다. 데이터 샘플의 품질과 크기가 충분히 큰 경우, 그러한 추측의 정확도는 실제 목적을 위해 충분히 높을 것입니다.
miracle173

아마도. 그러나 관계형 디자인이 현명한 주소 인 주소를 예로 들어 보겠습니다. 우편 주소는 어떻게 정규화되어야합니까? 몇 개의 테이블을 제안해야합니까? 3NF를 이해하면 국가, 주 /도 및 도시에 대한 테이블이 필요합니다. 우편 번호 / 도시 분석이 의미가 있는지는 모르겠지만 아마도 가능합니다. 그러나 기존 데이터를 어떻게 분석하고 (도시, 주)-> 국가를 결정합니까? 우편 번호가 전 세계적으로 이러한 구성과 관련이 있는지 여부를 어떻게 결정합니까?
Chris Travers
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.