0

편집 : 큰 테이블 하나 아래에 모두 보관하고 다른 양식을 구분하는 플래그를 사용하는 것이 좋습니까?데이터베이스 정규화

5 가지 양식으로 사이트를 구축해야합니다. 지금까지 양식에 대한 필드는 다음과 같습니다

http://i56.tinypic.com/25it7c7.jpg http://i56.tinypic.com/25it7c7.jpg

은 무엇이 디자인을 정상화하는 가장 좋은 방법이 될 것입니다?

나는 3 개 개의 다른 테이블로 분할 "개인 정보"에 대해 생각했다 : http://i53.tinypic.com/auts2h.jpg http://i53.tinypic.com/auts2h.jpg

한 다음 ID로 다른 사람을 참조 ... 이해가

겠습니까? 많은 관계로 끝날 것 같습니다 ...

+0

숙제 문제입니까? 문제는 아니지만 문제 (태그가 아님)에서 언급해야합니다. 귀하의 질문으로 돌아 가기 : "개인 세부 사항"을 3 개의 테이블로 나눌 생각을하고 있지만 테이블 다이어그램에 그 이름을 가진 테이블을 보여주지는 않습니다. 테이블 다이어그램에도 전체 열 이름이 표시되지 않으므로 정규화 할 수 있는지 여부를 알 수 없습니다. 마지막으로, 당신은 실제로 정규화의 규칙을 따르고 막혔 는가, 아니면 단순히 다른 사람들에게 모든 작업을하도록 요구하고 있습니까? 나는 당신이 당신의 질문에 더 구체적 일 필요가 있다고 생각합니다. – Tony

+0

죄송합니다. "개인 정보"에 대한 귀하의 언급은 개인 정보를 추출하여 디자인의 일부를 정상화하는 데 사용되는 도구입니다. – Tony

+0

예, 그게 무슨 뜻인지 미안 해요. 이제 UserContactDetails 및 UserPersonalDetails에 대한 참조를 UserDetails에 추가하고 나머지 모든 테이블에서 모든 "개인 정보"를 제거했습니다. – user441365

답변

2

정규화 된 데이터는 동일한 데이터가 여러 위치에 여러 번 저장되지 않는다는 것을 의미합니다. 예를 들어 고객 연락처 정보를 주문과 함께 저장하는 대신 고객 ID는 주문과 함께 저장되며 고객의 연락처 정보는 주문과 관련이 있습니다. 고객의 전화 번호가 업데이트되면 전화 번호를 업데이트해야하는 곳 (고객 테이블)이 하나만 있고 모든 주문은 업데이트되지 않고 올바른 정보를 갖게됩니다. 각 데이터 조각은 하나의 장소에 존재합니다. 이것은 정규화 된 데이터입니다.

질문에 대답하려면 : 아니오, 설명대로 대형 테이블을 분리하여 데이터베이스 구조를 더 표준화하지 마십시오.

단일 테이블을 여러 테이블로 분할하는 이유는 대개 일대 다 관계를 만드는 것입니다. 예를 들어 한 사람이 여러 전자 메일 주소를 가질 수 있습니다. 또는 여러 물리적 주소. 테이블을 분할하는 또 다른 일반적인 이유는 시스템을 모듈화하여 기존 테이블을 수정하지 않고 기존 테이블에 조인하는 테이블을 만들 수 있기 때문입니다.

하나의 큰 테이블을 여러 개의 작은 테이블로 분할하고 일대일 관계로 데이터를 더 정규화하지는 않기 때문에 쿼리를 작성하기가 더 어려워집니다. 정당한 이유가없는 한 인터페이스 (양식)를 중심으로 데이터베이스 디자인을 구조화하려고합니다. 보통은 그렇지 않습니다.

* 큰 테이블을 분할하고 일대일 관계를 만드는 데는 좋은 이유가 있지만 정규화는 그 중 하나가 아닙니다.

+1

귀하의 진술은 "하나의 테이블은 정의에 의해 표준화되었습니다." 올바르지 않습니다. 여기 예제 (http://en.wikipedia.org/wiki/First_normal_form#Repeating_groups_across_columns)에 표시된 테이블을 고려해보십시오. 단일 테이블이지만 1NF를 따르지는 않습니다. – Tony

+0

감사합니다. 포스터가 아이디어에 새로운 것으로 보였으므로 개요를 제공하려고했지만 너무 광범위하게 성명을 발표했습니다. 나는 나의 대답을 업데이트했다. – Ted

관련 문제