2

내 데이터 모델 내에서 적절한 부모/자식 관계를 만들려고합니다. 나는 부모와 자녀 사이에 전형적인 관계를 맺고 있습니다. 내가 그들의 자녀에 대해 알고 부모가있는 경우데이터 모델링 : 상위 및 하위 '이중'관계

내가 궁금하면에게 이제까지 허용

  1. 각 어린이 특히 부모에 대해 알 수있는 좋은 아이디어

입니다 ?. ,

parent  
------------- 
PARENT_ID 
OTHER_COL 
... 

child 
------------- 
CHILD_ID 
PARENT_ID // <-- Should this column be here? 
OTHER_COL 
... 

parent_has_children 
-------------------- 
PARENT_ID 
CHILD_ID 

나는이 아이의 부모 열에있는을 위해 볼 수있는 장점 (아이는 내 경우에는 부모를 가질 수 있습니다) 쉽게 자녀에서 부모를 검색하기위한 것입니다. 하지만,이 게으른 디자인입니까?

미리 감사드립니다. 관계가 진정으로 일대 다 및 다 대다하지 않으면

답변

3

1 대 다수의 관계

를 모델링 한 후 표준 모델링 방법은을 참조하는 것입니다 Child 테이블의 부모 테이블. 부모의 키 열 중 하나 (일반적으로 부모의 기본 키 (PK))를 통해 전달됩니다.

parent  
------------- 
PARENT_ID PRIMARY KEY, // PK for the parent table 
OTHER_COL 
... 

child 
------------- 
CHILD_ID PRIMARY KEY, // PK for the Child Table 
PARENT_ID    // <-- Should this column be here? = Yes 
CONSTRAINT FK_ChildParent FOREIGN KEY(PARENT_ID) REFERENCES parent(PARENT_ID) 

추가 많은 : 많은 테이블 parent_has_children 동시에, 또한 관계를 통해 referential integrity을 적용 할 RDMBS을 장려하기 위해 외래 키 (FK) 참조 열 (child.PARENT_ID)에 제한하는 것이 좋습니다 는 중복되므로 child 당 정확히 하나의 행을 갖게되고 곧이 테이블을 다른 테이블에서 추가/제거 된 행과 동기화 된 상태로 유지하는 데 부담이됩니다.이 동기화를 유지하지 않으면 결과가 혼동/모순이됩니다. 관계의 완전성).

Re : 부모님은 자녀에 대해 어떻게 알 수 있습니까? 주어진 부모

자식 레코드가 부모 외래 키 열을 필터링 자식 테이블에 간단한 쿼리를 사용하여 찾을 수 있습니다 :이 같이

SELECT ... 
FROM child 
WHERE PARENT_ID = myParentId; 

보통 일반적인 쿼리입니다, 그것은 항상 좋은 idea child.PARENT_ID이 인덱싱되는지 확인하는 것이 좋습니다. 일부 RDBMS 버전에서는 기본적으로 모든 외래 키에 대해이 작업을 수행합니다.

엔티티 모델 (예 :ORM의 경우) 부모 엔티티는 일반적으로 child 인스턴스를 포함하는 콜렉션을 가지며 하위 엔티티에서 스칼라 외래 키 child.PARENT_ID '열'이 완전히 제거되거나 부모의 예 :

class Parent 
{ 
    ParentId, 
    Child[] Children, 
    // ... 
} 

class Child 
{ 
    ChildId, 
    Parent Parent, // Optional, allows bidirectional navigation 
    // ... 
} 
1

당신은 외래 키와 CHILD 테이블에 PARENT_ID을 떠날 것이며, 전부 PARENT_HAS_CHILDREN 테이블을 삭제. 관계가 많은 어린이 1 부모 (즉, 같은 아이는 정확히 하나의 부모에 속할 수) 인 경우

0

나는 parent_has_children 테이블을 폐기쪽으로 경향이 대신 아이에 PARENT_ID있을 것입니다 -이이 데이터를 표현하는 더 일반적인 방법입니다.

관련 문제