설명하는 것은 일대일 관계입니다.
일반적으로 1 명의 부모는 N 명의 자식을 가질 수 있습니다. 그러나 각 어린이에게는 부모가 한 명만있을 수 있습니다 (실제 생활에서는 그렇지 않습니다. 그러나 그것이 당신이 당신의 예에서 의미하는 바 였다고 생각합니다). 그들은 방법이 모델
은 다음과 같습니다
parent(ID, name)
child(ID, name, parent_ID)
child.ID
는 PK가
parent.ID
는 PK입니다 (이 유일하게 아이를 식별)입니다
child.parent_ID
은 (는 유일하게 부모를 식별) parent.ID
을 가리키는 FK입니다. FK는 항상 PK를 가리 킵니다.
편집 : 당신에서 당신이 N-에-M 관계를 원하는 것 같다, 주석 처리합니다. 부모님과 자녀를 다시 사용하되 실생활과 같이 : 아이들은 부모가 1 명 이상입니다. N 대 M 관계는 두 테이블을 연결하는 중간에 하나의 테이블을 사용하여 모델링됩니다.
예 :
parent(ID, name) -- ID is PK
parent(1, 'parent1')
parent(2, 'parent2')
parent(3, 'parent3')
child(ID, name) -- ID is PK
child(10, 'child1')
child(11, 'child2')
child(12, 'child3')
-- who is parent of whom?
parent_child(parentID, childID) -- both parentID and childID are FKs
parent_child(1, 10) -- parent1 is parent of child1
parent_child(2, 10) -- parent2 is parent of child1
parent_child(2, 11) -- parent2 is parent of child2
FK: parent_child.parentID -> parent.ID
FK: parent_child.childID -> child.ID
하나 더 참고. 당신이 다음으로부터 깨닫는 지 여부는 확실하지 않습니다.
이 관계에 대해 PK 및 FK 제약 조건을 설정하는 것은 매우 좋은 생각이지만, 필수 사항은 아니며 문제 모델링에도 영향을 미치지 않습니다.
위에서 설명한 것처럼 3 개의 테이블을 사용하여 다 대다 시나리오를 모델링하는 것이 한 가지입니다. 이것은 완벽하게 작동합니다.
또 다른 한 가지는 PK 및 FK 제약 조건을 적용하는 것입니다. 이렇게하면 우연히 일치하지 않는 데이터를 삽입 할 수 없으며 (예 : 같은 사람이 두 번 또는 존재하지 않는 부모와 자녀 - 부모 관계) 쿼리 엔진이 더 나은 효율성을 제공하는 데 도움이됩니다.
당신의 스키마와 당신이 지금까지 노력이를 붙여주세요. – SMA