[database] 식별과 식별이 아닌 관계의 차이점은 무엇입니까?

차이점을 완전히 파악할 수 없었습니다. 두 가지 개념을 설명하고 실제 사례를 사용할 수 있습니까?



답변

  • 식별 관계 자식 테이블의 행의 존재는 상위 테이블의 행에 의존 할 때이다. 이것은 자식 테이블에 대한 pseudokey을 만들려면 다음 일 것이 일반적이기 때문에 혼동 될 수 있지만 하지 하위의 1 차 키의 상위 부분에 외래 키를 확인합니다. 공식적으로 이렇게하는 “올바른”방법은 외래 키를 자녀의 기본 키의 일부로 만드는 것입니다. 그러나 논리적 관계는 부모가 없으면 자식이 존재할 수 없다는 것입니다.

    예 : A Person에 하나 이상의 전화 번호가 있습니다. 전화 번호가 하나 뿐인 경우 간단히 열에 저장할 수 Person있습니다. 여러 전화 번호를 지원하기 위해 PhoneNumbers기본 키 person_idPerson테이블 참조를 포함 하는 두 번째 테이블을 만듭니다 .

    전화 번호는 별도의 테이블 속성으로 모델링 되었더라도 개인의 전화 번호라고 생각할 수 있습니다. 이것은 (우리가 문자 그대로 person_id기본 키에 포함하지 않더라도) 이것이 식별 관계라는 강력한 단서입니다 PhoneNumbers.

  • 비 식별 관계는 기본 키는 부모의 속성 때입니다 기본 키가 하위의 속성이된다. 이에 대한 좋은 예 Person.state는 기본 키 를 참조 하는 외래 키와 같은 조회 테이블 입니다 States.state. Person에 대한 자식 테이블입니다 States. 그러나 행 입력은 Person해당 state속성으로 식별되지 않습니다 . 즉 state의 기본 키의 일부가 아닙니다 Person.

    비 식별 관계는 선택적 또는 필수 일 수 있습니다. 즉, 외래 키 열은 각각 NULL을 허용하거나 NULL을 허용하지 않습니다.


비 식별 관계 식별과 비 식별 관계에 대해 여전히 혼란에 대한 내 답변을 참조하십시오.


답변

실제 세계에서 또 다른 설명이 있습니다.

책은 소유자에게 속해 있으며 소유자는 여러 권의 책을 소유 할 수 있습니다. 그러나 책은 소유자 없이도 존재할 수 있으며 책의 소유권은 소유자마다 다를 수 있습니다. 책과 소유자 간의 관계는 비 식별 관계입니다.

그러나 한 권의 책은 저자가 작성했으며 저자는 여러 권의 책을 쓸 수있었습니다. 그러나이 책은 저자가 작성해야합니다. 저자 없이는 존재할 수 없습니다. 따라서 책과 저자의 관계는 식별 관계입니다.


답변

Bill의 대답 은 정확하지만 다른 모든 대답 중에서 아무도 가장 중요한 측면을 지적하지 않는 것이 충격적 입니다.

아이가 부모 없이는 존재할 수 없다고 말하고 관계를 반복해서 말합니다. (예 : user287724 ). 이것은 사실이지만 요점을 완전히 놓친 것입니다. 이를 달성 하려면 외래 키가 아닌 것으로 충분 합니다. 기본 키의 일부일 필요는 없습니다.

여기 진짜 이유가 있습니다 :

식별 관계의 목적이다 외래 키 결코 변경 이 기본 키의 일부이므로 .. 따라서 식별 !!!


답변

식별 관계는 상위 오브젝트없이 하위 오브젝트가 존재할 수 없음을 지정합니다.

비 식별 관계는 1 : 1 또는 1 : n 카디널리티 개체 간의 규칙적인 연관을 지정합니다.

비 식별 관계는 상위 테이블 카디 낼 리티를 설정하여 상위가 필요하지 않은 경우 선택적이거나 상위가 필요한 경우 필수로 지정할 수 있습니다.


답변

다음은 좋은 설명입니다.

두 개체 간의 관계는 “식별”또는 “비 식별”로 분류 될 수 있습니다. 상위 항목의 기본 키가 하위 항목의 기본 키에 포함 된 경우 식별 관계가 존재합니다. 반면에, 상위 엔티티의 기본 키가 하위 엔티티에 포함되지만 하위 엔티티의 기본 키의 일부가 아닌 경우 비 식별 관계가 존재합니다. 또한, 비 식별 관계는 “필수”또는 “비 필수”로 더 분류 될 수있다. 하위 테이블의 값이 널이 될 수없는 경우 필수 비 식별 관계가 존재합니다. 반면에, 하위 테이블의 값이 널이 될 수있는 경우 비 필수 비 식별 관계가 존재합니다.

http://www.sqlteam.com/article/database-design-and-modeling-fundamentals

다음은 식별 관계의 간단한 예입니다.

Parent
------
ID (PK)
Name

Child
-----
ID (PK)
ParentID (PK, FK to Parent.ID) -- notice PK
Name

해당하는 비 식별 관계는 다음과 같습니다.

Parent
------
ID (PK)
Name

Child
-----
ID (PK)
ParentID (FK to Parent.ID) -- notice no PK
Name


답변

user287724의 답변 은 다음과 같은 책과 저자 관계를 보여줍니다.

그러나 한 권의 책은 저자에 의해 쓰여졌으며 저자는 여러 권의 책을 쓸 수있었습니다. 그러나이 책은 저자가 쓸 수 없으며 저자 없이는 존재할 수 없습니다. 그러므로 책과 저자 사이의 관계는 식별 관계입니다.

이것은 매우 혼란스러운 예이며에 대한 유효한 예아닙니다identifying relationship .

예,이 book적어도 하나없이 기록 할 수 author있지만, author(가)의 (가 외래 키의) book되어 식별되지book 에서 books표를!

당신은 제거 할 수 author로부터 (FK) book행을 여전히 다른 필드 (에 의해 책의 행을 식별 할 수있는 ISBN, ID… 등), 하지만이 책의 저자가 아닌!

identifying relationship(제품 표)와 (제품 세부 정보 표)의 ​​관계가 유효한 예라고 생각합니다.1:1

products table
+------+---------------+-------+--------+
|id(PK)|Name           |type   |amount  |
+------+---------------+-------+--------+
|0     |hp-laser-510   |printer|1000    |
+------+---------------+-------+--------+
|1     |viewsonic-10   |screen |900     |
+------+---------------+-------+--------+
|2     |canon-laser-100|printer|200     |
+------+---------------+-------+--------+

printers_details table
+--------------+------------+---------+---------+------+
|Product_ID(FK)|manufacturer|cartridge|color    |papers|
+--------------+------------+---------+---------+------+
|0             |hp          |CE210    |BLACK    |300   |
+--------------+------------+---------+---------+------+
|2             |canon       |MKJ5     |COLOR    |900   |
+--------------+------------+---------+---------+------+
* please note this is not real data

이 예 Product_ID에서 printers_details표의 표는 FK가 products.id표를 참조하고 표 에서도 PK 를 참조하는 것으로 간주됩니다. 이는 프린터 표의 (FK) 가 하위 표 내부의 행을 식별printers_details 하기 때문에 식별 관계이므로 제거 할 수 없습니다. 우리가 기본 키의 손실 때문에 자식 테이블에서 우리는 더 이상 행을 식별 할 수 없기 때문에Product_IDproduct_id

두 줄에 넣으려면 다음을 수행하십시오.

식별 관계는 자식 테이블의 FK가 자식 테이블의 PK (또는 식별자)로 간주되고 여전히 부모 테이블을 참조 할 때의 관계입니다.

일부 국가 데이터베이스의 가져 오기 및 내보내기에 3 개의 테이블 (수입-제품-국가)이있는 경우를 예로들 수 있습니다.

import표 (이들 필드가 아이입니다 product_id(FK)는 country_id, 단위는 수송의 방법 (항공, 해상) 수입 (FK), 수입품의 양, 가격)
we may use the (
PRODUCT_ID , the각각을 식별 할 수 country_id`를) 가져 오기 행 “모두 같은 해에있는 경우”두 열 모두 하위 테이블 (가져 오기)의 기본 키를 구성하고 상위 테이블을 참조 할 수 있습니다.

나는 행복 드디어의 개념을 이해 해요하시기 바랍니다 identifying relationshipnon identifying relationship그래서 나는 이러한 투표 업의 모든 잘못이야 말하지 마십시오, 완전히 잘못된 예

논리적으로 책은 저자 없이는 쓸 수 없지만 저자 없이는 책을 식별 할 수 있습니다. 사실 저자와 동일하게 식별 할 수 없습니다!

책 행에서 저자를 100 % 제거 할 수 있으며 여전히 책을 식별 할 수 있습니다! .


답변

비 식별 관계

비 식별 관계는 자녀가 부모와 관련되어 있지만 스스로 식별 할 수 있음을 의미합니다.

PERSON    ACCOUNT
======    =======
pk(id)    pk(id)
name      fk(person_id)
          balance

ACCOUNT와 PERSON의 관계는 식별되지 않습니다.

관계 식별

식별 관계는 부모가 자녀에게 정체성을 부여하기 위해 필요하다는 것을 의미합니다. 아이는 부모 때문에 존재합니다.

이것은 외래 키도 기본 키임을 의미합니다.

ITEM      LANGUAGE    ITEM_LANG
====      ========    =========
pk(id)    pk(id)      pk(fk(item_id))
name      name        pk(fk(lang_id))
                      name

ITEM_LANG과 ITEM의 관계가 식별됩니다. ITEM_LANG과 LANGUAGE도 마찬가지입니다.