2010-02-12 4 views
2

우리는 항상 일대일 테이블을 결합해야합니까?열을 단일 테이블로 결합할지 여러 테이블로 분할할지 결정하는 방법은 무엇입니까?

나는 사용자 ID의 UID를 가지고, 기본 포함 된 테이블 : 이전 사용자 테이블

uid, stats, etc.. 

에 외래 키와,

uid, name, address, etc.. 

와 본질적으로 같은 일이 다른 테이블을 방금 그들을 결합해야합니까? 그게 언제 이해할 수 있고 언제 내가 원하지 않을까요?

답변

6

이 리소스는 Five Normal Forms for Relational Databases에서 확인하십시오. 여기에는 정보를 결합하거나 테이블로 분할하는 방법을 결정하기위한 몇 가지 지침이 있습니다. 각 테이블은 일의 한 유형을 대표해야

  • : 간단히 말해서

    은, 엄지 손가락의 규칙을 사용합니다.
  • 기본 키는 테이블의 다른 항목과 고유하게 구분해야합니다.
  • 테이블의 모든 열은 기본 키 값과 기본 키 값에만 의존해야합니다.
    • 단일 테이블의 여러 필드가 논리적 하위 그룹 (예 : 주소의 일부)을 구성하는 경우 해당 테이블이 고유 한 테이블 일 필요가 있습니다.
+0

덕분에 여전히 어느 쪽이든 갈 수있는 것처럼 보입니까? – Timmy

+1

이론적으로는 대부분의 경우 잠금 또는 성능 문제를 해결하기 위해 수직 분할과 반대되는 좋은 이유가없는 한 1-1 테이블을 피해야합니다. – JohnFx

3

두 번째 테이블의 필드를 채우지 않는 것이 일반적 일 때 두 테이블을 별도로 유지하는 것이 좋습니다. 따라서 두 번째 테이블을 사용하면 채워진 정보없이 행당 많은 메모리를 저장할 수 있습니다.

예를 들어 소수의 사용자 만 '통계 등'을 사용하는 경우 해당 정보를 별도의 테이블에 보관하는 것이 좋습니다. 해당 정보가없는 사용자의 행을 작성하지 마십시오.

+0

덕분에, 내 경우에는 그것의 항상 될거야 1 : 1, 내가 모두 – Timmy

+0

모두 행에서를 만들 이 경우에는 성능을 위해 (그리고 저장 공간에 대해서는 약간) 확실히 하나의 결합 된 테이블 만 사용하십시오. – Aaron

1

일대일 관계는 ER model에 의해 정의 된 것입니다.

가장 널리 그들이가되는 사용되는 여러 가지 방법으로 관계형 모델로 매핑 할 수 있습니다 :

  • 두 개체의 속성으로 하나 개의 테이블을 생성. 엄격한 1:1 관계에 유용합니다.

  • 엔티티 당 하나의 테이블을 만들고 두 링크 필드 모두에서 UNIQUE 제약 조건이있는 추가 링크 테이블에서 참조하십시오. (0-1):(0-1) 관계 및 관계 자체에 속성을 추가하는 데 유용합니다.

  • UNIQUE 필드에서 FOREIGN KEY 제약 조건을 사용하여 엔티티 당 하나의 테이블을 만들고 다른 테이블에서 하나의 테이블을 참조합니다. 1:(0-1) 관계에 유용합니다.

성능 문제는이 관계의 관계형 표현 선택에도 영향을 줄 수 있습니다.

당신은 내 블로그에이 글을 읽을 수 있습니다 :

관련 문제