[sql] 일대 다와 다 대일 관계의 차이점

일대 다 관계와 다 대일 관계의 실제 차이점은 무엇입니까? 그것은 단지 반전 된 것입니까?

이 주제에 대한 ‘좋고 이해하기 쉬운’자습서를 찾을 수 없습니다. 초보자를위한 SQL : Part 3-데이터베이스 관계



답변

예, 그 반대입니다. 엔티티가 존재하는 관계의 측면에 따라 다릅니다.

예를 들어 한 부서가 여러 직원을 고용 할 수있는 경우 부서 간 관계는 일대 다 관계 (1 부서는 많은 직원을 고용 함)이고 직원 대 부서 관계는 다 대일 관계입니다 (많은 직원이 한 부서에서 일함).

관계 유형에 대한 추가 정보 :

데이터베이스 관계-IBM DB2 문서


답변

페이지에서 데이터베이스 용어에 대해

테이블 간의 대부분의 관계는 일대 다입니다.

예:

  • 한 지역은 많은 독자의 서식지가 될 수 있습니다.
  • 한 독자가 여러 구독을 가질 수 있습니다.
  • 한 신문에 여러 구독이있을 수 있습니다.

다 대일 관계는 일대 다와 동일하지만 관점이 다릅니다.

  • 많은 독자들이 한 지역에 살고 있습니다.
  • 많은 구독은 동일한 독자가 될 수 있습니다.
  • 많은 구독이 동일한 신문에 대한 것입니다.

답변

일대 다 관계와 다 대일 관계의 실제 차이점은 무엇입니까?

데이터를 시각화하는 데 도움이되는 이러한 용어 사이에는 개념적 차이점이 있으며 완전히 이해해야하는 생성 된 스키마의 가능한 차이점도 있습니다. 대부분의 차이점은 관점 중 하나입니다.

(A)에 일대 다 관계가, 로컬 테이블에서 다른 테이블 많은 행과 연관 될 수있는 하나 개의 행을 갖는다. 초보자를위한 SQL 의 예에서 하나 Customer는 많은 Orders 와 연관 될 수 있습니다 .

반대의 다 대일 관계에서 로컬 테이블에는 다른 테이블의 한 행과 연관된 많은 행이있을 수 있습니다. 이 예에서 많은는 Order하나에 연결될 수 있습니다 Customer. 이 개념적 차이는 정신적 표현에 중요합니다.

또한 관계를 지원하는 스키마는 CustomerOrder테이블 에서 다르게 표현 될 수 있습니다 . 예를 들어 고객에게 다음 idname같은 열이있는 경우

id,name
1,Bill Smith
2,Jim Kenshaw

그런 다음 a Order가에 연결되기 위해 Customer많은 SQL 구현이 Order테이블에 id연결된 의을 저장하는 열을 추가합니다 Customer(이 스키마에서 customer_id:

id,date,amount,customer_id
10,20160620,12.34,1
11,20160620,7.58,1
12,20160621,158.01,2

위의 데이터 행에서 customer_idid 열을 보면 Bill Smith(customer-id # 1)에 2 개의 주문이 연결되어 있음을 알 수 있습니다. 하나는 $ 12.34이고 다른 하나는 $ 7.58입니다. Jim Kenshaw(customer-id # 2)는 $ 158.01에 대해 주문이 1 개뿐입니다.

알아 두어야 할 중요한 것은 일반적으로 일대 다 관계가 실제로 “일”인 테이블에 열을 추가하지 않는다는 것입니다. 에 Customer와의 관계를 설명하는 추가 열이 없습니다 Order. 실제로에는 및 테이블과 Customer일대 다 관계가 있지만 테이블에 추가 열이 추가되지 않을 수도 있습니다 .ShippingAddressSalesCallCustomer

그러나 다 대일 관계를 설명하기 위해 종종 id“일”테이블에 대한 외래 키인 “다”테이블에 customer_id열이 추가됩니다 Order. 이 경우에는 열이 . $ 12.34에 대한 주문 # 10을에 연결하기 위해 열을 의 ID 1에 Bill Smith할당합니다 .customer_idBill Smith

그러나 CustomerOrder관계 를 설명하는 다른 테이블이있을 수도 있으므로 테이블에 추가 필드를 추가 할 필요가 없습니다 Order. 대신 추가의 customer_id받는 사람 필드를 Order테이블이있을 수 있습니다 Customer_Order모두에 대한 키를 포함 테이블 CustomerOrder.

customer_id,order_id
1,10
1,11
2,12

이 경우 일대 다다대 일은 스키마 변경이 없기 때문에 모두 개념적입니다. 스키마 및 SQL 구현에 따라 달라지는 메커니즘입니다.

도움이 되었기를 바랍니다.


답변

다른 점이 없다. 관계를 표현하는 방법은 언어와 선호도의 문제 일뿐입니다.


답변

첫 번째 질문에 대한 답은 : 둘 다 비슷합니다.

두 번째 질문에 대한 답은 다음과 같습니다 : 일대 다-> MAN (MAN 테이블)에는 한 명 이상의 아내 (WOMEN 테이블) 다 대일-> 한 명 이상의 여성이 한 MAN과 결혼했습니다.

이제이 관계를 두 테이블 MAN 및 WOMEN과 연관시키려는 경우 하나의 MAN 테이블 행은 WOMEN 테이블의 행과 많은 관계를 가질 수 있습니다. 명확하기를 바랍니다.


답변

하나의 관계가있는 두 개의 테이블

SQL

SQL에는 참조라고하는 한 종류의 관계 만 있습니다. (귀하의 프런트 엔드는 [일부 답변에서와 같이] 유용하거나 혼란스러운 일을 할 수 있지만 이는 다른 이야기입니다.)

  • 외래 키 하나 개의 테이블에서합니다 ( referenc 보내고 표)
    참고 기본 키 다른 테이블의합니다 ( referenc의 에드 테이블)
  • SQL 용어에서 Bar는 Foo를 참조
    합니다.

    CREATE TABLE Foo (
        Foo   CHAR(10)  NOT NULL, -- primary key
        Name  CHAR(30)  NOT NULL
        CONSTRAINT PK             -- constraint name
            PRIMARY KEY (Foo)     -- pk
        )
    CREATE TABLE Bar (
        Bar   CHAR(10)  NOT NULL, -- primary key
        Foo   CHAR(10)  NOT NULL, -- foreign key to Foo
        Name  CHAR(30)  NOT NULL
        CONSTRAINT PK                -- constraint name
            PRIMARY KEY (Bar),       -- pk
        CONSTRAINT Foo_HasMany_Bars  -- constraint name
            FOREIGN KEY   (Foo)      -- fk in (this) referencing table
            REFERENCES Foo(Foo)      -- pk in referenced table
        )
  • 이후 Foo.Foo기본 키, 그것은 단지 하나의 행의 특정 값이 독특Foo

  • 때문에 Bar.Foo참조하는 외래 키이고, 어떤 고유 인덱스가 거기에 없다,의 주어진 값에 대해 많은 행이있을 수 있습니다Foo
  • 따라서 관계 Foo::Bar는 일대 다입니다.
  • 이제 당신 은 다 대일

    관계를 인식 할 수 있습니다.Bar::Foo

    • 그러나 혼동하지 마십시오. BarFoo행에 대해 참조하는 행이 하나뿐입니다.
  • SQL에서는 이것이 우리가 가진 전부입니다. 이것이 필요한 전부입니다.

일대 다 및 다 대일 관계의 실제 차이점은 무엇입니까?

관계가 하나뿐이므로 차이가 없습니다. 지각 (한 “끝”또는 다른 “끝”에서) 또는 역방향 읽기는 관계를 변경하지 않습니다.

카디널리티

카디널리티는 데이터 모델에서 먼저 선언되며, 이는 논리적 및 물리적 (의도)을 의미 한 다음 구현에서 (의도 실현)를 의미합니다.

카디널리티

1 대 0 대 다
SQL에서 (위의 내용) 필요한 모든 것입니다.

일대 다 참조 테이블에서 트랜잭션 을 적용하려면 트랜잭션
필요 합니다.

일대 일대일 다음
이 필요합니다 Bar.

CONSTRAINT AK    -- constraint name
    UNIQUE (Foo) -- unique column, which makes it an Alternate Key

일대일 참조 테이블에서 트랜잭션 을 적용하려면 트랜잭션
필요 합니다.

다 대다
물리적 수준에는 그런 것이 없습니다 (SQL에는 관계 유형이 한 가지뿐입니다).

모델링 연습 중 초기 논리적 수준에서 이러한 관계를 그리는 것이 편리 합니다. 모델이 구현에 가까워지기 전에 존재할 수있는 것만 사용하는 것이 좋습니다. 이러한 관계는 연관 테이블을 구현하여 해결됩니다.

다 대다 해결


답변

일대 다 및 다대 일은 다중도에서 유사하지만 Aspect (예 : 방향성)가 아닙니다.

엔터티 클래스 간의 연결 매핑 및 테이블 간의 관계 . 관계에는 두 가지 범주가 있습니다.

  1. 다중도 (ER 용어 : 카디널리티)
    • 일대일 관계 : 남편과 아내의 예
    • 일대 다 관계 : 어머니와 자녀의 예
    • 다 대다 관계 : 예제 학생 및 주제
  2. 방향성 : 매핑에는 영향을 미치지 않지만 데이터에 액세스하는 방법에는 차이가 있습니다.
    • 단방향 관계 : 다른 엔터티를 참조하는 관계 필드 또는 속성입니다.
    • 양방향 관계 : 각 항목에는 다른 항목을 참조하는 관계 필드 또는 속성이 있습니다.