일대일 관계를 압축하지 않는 것이 합리적입니까?


12

우리가 테이블 B와 일대일 관계를 갖는 테이블 A를 가지고 있다면, 그것들을 분리하는 것이 합리적입니까? 아니면 그것들을 단일 테이블로 결합하는 것이 결코 아프지 않습니까? 이 시나리오 중 하나 (두 테이블과 하나의 결합 된 테이블)가 일반적인 형식 (1NF, 2NF, 3NF 등)과 관련하여 어떤 영향을 미칩니 까?


5
일대일 또는 일대일 또는 1을 의미합니까?
jpmc26

답변:


30

예, 이것이 더 나은 디자인이 될 수있는 많은 이유가 있습니다.

상속 / 확장 관계가있을 수 있습니다. 예를 들어 User테이블과 Administrator필드가 더 많은 테이블이있을 수 있습니다. 두 테이블 모두 기본 키 사용자 ID (따라서 1 : 1 관계)를 가질 수 있지만 모든 사용자가 Administrator테이블에 레코드를 갖지는 않습니다 . 워크 플로우 (예 : ScheduledTask테이블 및 CompletedTask테이블)를 지원하는 경우 비슷한 것이 필요 합니다.

일반적으로 사용되는 데이터에 대한 간단한 테이블을 User만들고 자주 필요하지 않은 세부 사항에 대한 더 큰 테이블을 원할 수 있습니다 UserDetails. 단일 데이터 페이지에 더 많은 레코드를 넣을 수 있으므로 성능을 향상시킬 수 있습니다.

당신은 테이블, 예를 들어 서로 다른 권한을 할 수 UserUserCredentials

당신은 다른 백업 전략을 원하는 따라서 예를 들면 서로 다른 파티션에 두 테이블을 넣을 수 TransactionTransactionArchive

단일 테이블에서 지원할 수있는 것보다 많은 열이 필요할 수 있습니다. 예를 들어 인덱싱해야하는 큰 텍스트 열이 많고 DB 플랫폼이 4K 데이터 페이지 또는 사용자 행동으로 제한되는 경우.


테이블에 데이터베이스 시스템에서 지원할 수있는 것보다 많은 열이 있으면 디자인 문제가있는 것입니다. 그러나 그렇지 않으면, 당신의 대답은 건전합니다.
Robert Harvey

2
합의 ... 나는 모든 이유를 편집하지 않고 철저한 목록을 작성하려고합니다.
John Wu

워크 플로우의 배경은 무엇입니까? 사용하는 특정 소프트웨어가 있습니까? 자신 만의 워크 플로우 시스템을 구축 했습니까?
Robert Harvey

1
물리적 = 서버 성능, 페이지 크기, 인덱싱, 클러스터링, 백업 등과 같은 물리적 제약 조건과 관련이 없으며 논리적 디자인에는 영향을 미치지 않습니다. 순전히 논리적 인 관점에서 단일 엔터티는 단일 테이블 내의 단일 튜플 또는 행으로 개념화되어야합니다.
John Wu

4
링크 "관계형 데이터베이스에서 일대일 관계는 하나의 상위 레코드 또는 필드에 0 또는 하나의 하위 레코드 만있는 경우 발생합니다."
존 우

6

@ john-wu의 탁월한 대답에 또 다른 이유는 그림과 같은 BLOB 유형의 열이있을 때입니다.

사용자 테이블에 대한 쿼리가 더 빠를뿐만 아니라 Blob이 포함 된 테이블을 저렴하고 느린 스토리지의 다른 테이블 스페이스로 이동하여 가장 많이 쿼리 된 데이터를 빠른 스토리지의 기본 테이블 스페이스.


3

일대일 관계는 표 B의 관련 레코드를 선택적으로 사용 하려는 경우에만 의미가 있습니다 .

때때로 당신이 원하는 것은 변형 레코드 또는 Tagged Union 입니다. 즉, 서로 다른 정보를 포함하는 여러 테이블이 있지만 모두 일대일 관계로 테이블 A와 관련됩니다. 그런 다음 표 A의 필드를 기준으로 연결할 테이블을 선택하십시오.

예를 들면 다음과 같습니다.

type Transaction(The_Type: PaymentType := Cash) is record

    Amount: Integer;

    case The_Type is
        when Cash =>
            Discount: boolean;
        when Check =>
            CheckNumber: Positive;
        when Credit =>
            CardNumber: String(1..5);
            Expiration: String(1..5);
    end case;
end record;

선택 사항 인 경우이 하나의 테이블에 있고 원하는 열을 선택하는 것과 어떻게 다릅니 까?
29 번째 Saltshaker

추가 필드가 없으면 기본 테이블에 추가 필드를 갖는 비용이 발생합니다. 변형 레코드에 여러 테이블이있는 경우 단일 테이블에 100 개의 열이있을 수 있으며 대부분은 대부분 사용되지 않습니다.
Robert Harvey

2

비즈니스 모델링에서 비즈니스 관점에서 논리적으로 분리 된 두 엔티티 A와 B는 일반적으로 다른 테이블에 맵핑됩니다.

예를 들어, 객체 지향 수단으로 비즈니스 모델링을 수행 할 때는 일반적으로 일종의 객체 관계형 매핑이 있습니다. 객체 모델로 시작하여 그로부터 관계형 모델을 도출 할 수 있습니다. 따라서 객체 모델에서 클래스 A와 B를 만들었으나 객체는 1 : 1로 대응되지만 단일 책임 원칙 때문에 분리되어 있어야합니다 . 오브젝트 모델에서이 클래스는 속성이있는 테이블이 아니라 메소드로 구현 된 일부 동작과 함께 비즈니스 오브젝트를 나타낼 수 있습니다. 그리고 이러한 클래스를 이제 관계형 모델에 간단하게 매핑하면 1 : 1 관계로 별도의 테이블 A와 B가 제공됩니다.

필자의 경험에 따르면 비즈니스 또는 OO 데이터 모델을 만들 때 이러한 논리적 분리는 성능, 개별 보안 또는 파티셔닝과 같은 "물리적"이유보다 1 : 1 관계에서 훨씬 더 일반적입니다.


무슨 뜻인지 구체적으로 설명해 주시겠습니까?
29 번째 Saltshaker
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.