일대 다 관계와 다 대일 관계의 실제 차이점은 무엇입니까? 그것은 단지 반전 된 것입니까?
이 주제에 대한 '좋고 이해하기 쉬운'자습서를 찾을 수 없습니다. 초보자를위한 SQL : Part 3-데이터베이스 관계
일대 다 관계와 다 대일 관계의 실제 차이점은 무엇입니까? 그것은 단지 반전 된 것입니까?
이 주제에 대한 '좋고 이해하기 쉬운'자습서를 찾을 수 없습니다. 초보자를위한 SQL : Part 3-데이터베이스 관계
답변:
예, 그 반대입니다. 엔티티가 존재하는 관계의 측면에 따라 다릅니다.
예를 들어 한 부서가 여러 직원을 고용 할 수있는 경우 부서 간 관계는 일대 다 관계 (1 부서는 많은 직원을 고용 함)이고 직원 대 부서 관계는 다 대일 관계입니다 (많은 직원이 한 부서에서 일함).
관계 유형에 대한 추가 정보 :
테이블 간의 대부분의 관계는 일대 다입니다.
예:
- 한 지역은 많은 독자의 서식지가 될 수 있습니다.
- 한 독자가 여러 구독을 가질 수 있습니다.
- 한 신문에 여러 구독이있을 수 있습니다.
다 대일 관계는 일대 다와 동일하지만 관점이 다릅니다.
- 많은 독자들이 한 지역에 살고 있습니다.
- 많은 구독은 동일한 독자가 될 수 있습니다.
- 많은 구독이 동일한 신문에 대한 것입니다.
일대 다 관계와 다 대일 관계의 실제 차이점은 무엇입니까?
데이터를 시각화하는 데 도움이되는 이러한 용어 사이에는 개념적 차이점이 있으며 완전히 이해해야하는 생성 된 스키마의 가능한 차이점도 있습니다. 대부분의 차이점은 관점 중 하나입니다.
(A)에 일대 다 관계가, 로컬 테이블에서 다른 테이블 많은 행과 연관 될 수있는 하나 개의 행을 갖는다. 초보자를위한 SQL 의 예에서 하나 Customer
는 많은 Order
s 와 연관 될 수 있습니다 .
반대의 다 대일 관계에서 로컬 테이블에는 다른 테이블의 한 행과 연관된 많은 행이있을 수 있습니다. 이 예에서 많은는 Order
하나에 연결될 수 있습니다 Customer
. 이 개념적 차이는 정신적 표현에 중요합니다.
또한 관계를 지원하는 스키마는 Customer
및 Order
테이블 에서 다르게 표현 될 수 있습니다 . 예를 들어 고객에게 다음 id
과 name
같은 열이있는 경우
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_id
id 열을 보면 Bill Smith
(customer-id # 1)에 2 개의 주문이 연결되어 있음을 알 수 있습니다. 하나는 $ 12.34이고 다른 하나는 $ 7.58입니다. Jim Kenshaw
(customer-id # 2)는 $ 158.01에 대해 주문이 1 개뿐입니다.
알아 두어야 할 중요한 것은 일반적으로 일대 다 관계가 실제로 "일"인 테이블에 열을 추가하지 않는다는 것입니다. 에 Customer
와의 관계를 설명하는 추가 열이 없습니다 Order
. 실제로에는 및 테이블과 Customer
일대 다 관계가 있지만 테이블에 추가 열이 추가되지 않을 수도 있습니다 .ShippingAddress
SalesCall
Customer
그러나 다 대일 관계를 설명하기 위해 종종 id
"일"테이블에 대한 외래 키인 "다"테이블에 customer_id
열이 추가됩니다 Order
. 이 경우에는 열이 . $ 12.34에 대한 주문 # 10을에 연결하기 위해 열을 의 ID 1에 Bill Smith
할당합니다 .customer_id
Bill Smith
그러나 Customer
및 Order
관계 를 설명하는 다른 테이블이있을 수도 있으므로 테이블에 추가 필드를 추가 할 필요가 없습니다 Order
. 대신 추가의 customer_id
받는 사람 필드를 Order
테이블이있을 수 있습니다 Customer_Order
모두에 대한 키를 포함 테이블 Customer
과 Order
.
customer_id,order_id
1,10
1,11
2,12
이 경우 일대 다 및 다대 일은 스키마 변경이 없기 때문에 모두 개념적입니다. 스키마 및 SQL 구현에 따라 달라지는 메커니즘입니다.
도움이 되었기를 바랍니다.
javax.persistence.OneToMany
다르게보다 ManyToOne
. 그것들이 동의어이거나 구현에 달려 있다고 말하는 것입니까? 내 대답이 틀렸습니까?
다른 점이 없다. 관계를 표현하는 방법은 언어와 선호도의 문제 일뿐입니다.
SQL에는 참조라고하는 한 종류의 관계 만 있습니다. (귀하의 프런트 엔드는 [일부 답변에서와 같이] 유용하거나 혼란스러운 일을 할 수 있지만 이는 다른 이야기입니다.)
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
Bar
한 Foo
행에 대해 참조하는 행이 하나뿐입니다.일대 다 및 다 대일 관계의 실제 차이점은 무엇입니까?
관계가 하나뿐이므로 차이가 없습니다. 지각 (한 "끝"또는 다른 "끝"에서) 또는 역방향 읽기는 관계를 변경하지 않습니다.
카디널리티는 데이터 모델에서 먼저 선언되며, 이는 논리적 및 물리적 (의도)을 의미 한 다음 구현에서 (의도 실현)를 의미합니다.
1 대 0 대 다
SQL에서 (위의 내용) 필요한 모든 것입니다.
일대 다 참조 테이블에서 트랜잭션 을 적용하려면 트랜잭션 이
필요 합니다.
일대 일대일 다음
이 필요합니다 Bar
.
CONSTRAINT AK -- constraint name
UNIQUE (Foo) -- unique column, which makes it an Alternate Key
일대일 참조 테이블에서 트랜잭션 을 적용하려면 트랜잭션 이
필요 합니다.
다 대다
물리적 수준에는 그런 것이 없습니다 (SQL에는 관계 유형이 한 가지뿐입니다).
모델링 연습 중 초기 논리적 수준에서 이러한 관계를 그리는 것이 편리 합니다. 모델이 구현에 가까워지기 전에 존재할 수있는 것만 사용하는 것이 좋습니다. 이러한 관계는 연관 테이블을 구현하여 해결됩니다.
일대 다 및 다대 일은 다중도에서 유사하지만 Aspect (예 : 방향성)가 아닙니다.
엔터티 클래스 간의 연결 매핑 및 테이블 간의 관계 . 관계에는 두 가지 범주가 있습니다.
실질적인 차이는 없습니다. Devendra가 설명하는 것처럼 문제를 보는 방식에서 가장 의미있는 관계를 사용하십시오.
일대 다 에는 부모 클래스에 n 개의 자식이 포함되어 있으므로 컬렉션 매핑입니다.
다 대일 에는 n 개의 자식이 있습니다. 하나의 부모를 포함하므로 개체 매핑입니다.