1

3 개의 자체 참조가 있거나이 시나리오에 대처하는 방법이 있는지 확실하지 않습니다.트리플 자체 참조?

나는 테이블/엔티티 (ID, 이름, 설명 ... 같은 기본 필드의 모든 종류의) "동물"을 가지고 내가 표현하고자하는 특정 동물 (예 : 개) :

어떤 동물은 다른 동물 (고양이, 닭) 가 다른 동물을 "중립"(돼지와 말)

유일한 가능한 방법 (... 말할 수 거북이 소) 는 "싫어" "사랑"내가 이 스키마를 모델링하는 방법은 그림과 같습니다. 3 개 관계는 (NM) 많은 많은있다 그래서 동물

enter image description here

시나리오를 대표하는 더 나은 방법이 있습니다 사이의 관계를 저장하기 위해 3 개 이상의 테이블을 만들어 결국? 내가 뭔가를 놓치고 있거나 뭔가 잘못하고 있니?

답변

3

3 가지 표만 사용하고 "개가 싫어"("고양이는 개가 싫어") 같은 조건을 가질 수 있도록 아래에 설명 된 방식으로 모델을 만들 수 있습니다.

animals 
    id    unsigned int(P) 
    name   varchar(10) 

+----+----------+ 
| id | name  | 
+----+----------+ 
| 1 | dog  | 
| 2 | cat  | 
| 3 | cow  | 
| 4 | tortoise | 
| 5 | chicken | 
| 6 | pig  | 
| 7 | horse | 
| .. | ........ | 
+----+----------+ 

animals_feelings 
    id    unsigned int(P) 
    source_id  unsigned int(F animals.id) 
    feeling_id  unsigned int(F feelings.id) 
    target_id  unsigned int(F animals.id) 

+----+-----------+------------+-----------+ 
| id | source_id | feeling_id | target_id | 
+----+-----------+------------+-----------+ 
| 1 |   1 |   2 |   2 | 
| 2 |   1 |   1 |   3 | 
| 3 |   1 |   1 |   4 | 
| 4 |   1 |   3 |   6 | 
| 5 |   1 |   3 |   7 | 
| .. | ......... | .......... | ......... | 
+----+-----------+------------+-----------+ 

feelings 
    id    unsigned int(P) 
    description  varchar(10) 

+----+-------------+ 
| id | description | 
+----+-------------+ 
| 1 | loves  | 
| 2 | hates  | 
| 3 | is neutral | 
| .. | ........... | 
+----+-------------+ 
+0

매우 훌륭하고 우아한 솔루션입니다. 베니 감사합니다 :) – Kitinz