5

중첩 세트 모델을 구현하는 방법을 배우려하고 있지만 여러 범주에 속할 수있는 항목과 관련된 혼란이 여전히 있습니다. 그들이 있기 때문에 당신이 사과를 추가 할 때 DB에 중복을 피하기 어떻게계층 적 데이터 - 중첩 세트 모델 : MySql

Hierarchical Data: Numbered Tree

Table

... 그 아래의 예는 HERE에서 가져온 내가 건너 온 많은 다른 예를 반영되었다 감안할 때 멀티 컬러 (예 : 빨강, 노랑, 초록)?

답변

5

중복을 피하지 않고 사과 (또는 사과에 대한 참조)가 트리에 두 번 배치됩니다. 그렇지 않으면 트리가 아니라 그래프가됩니다. 귀하의 질문은 당신이 ... Swing JTree 또는 HTML 트리를 구축하는 경우에도 동등하게 적용됩니다.

중첩 세트 모델은 관계형 DB에서 트리 구조를 푸시하고 트래버스하는 효율적인 방법 일뿐입니다. 데이터 구조 자체는 아닙니다. MySQL은 트리 구조 (예 : 오라클이 제공하는 것과 같은)를 처리하는 기능이 없으므로 MySQL 사용자들 사이에서 더 많이 사용됩니다.

건배!

+0

그래, 나는 대답을 찾고 있지만 그 주제에 대해 결정적인 것을 찾을 수는 없다. 이 시점에서 MySQL을 사용하고 있으므로 향후 Apple의 복제본을 사용하여 비어 있지 않은 DB로 변환하는 데 문제가 있습니까? 아니면이 시점에서 여러 부모를 허용하지 않고 Nested Set 방식을 그대로 사용하여이 문제를 해결해야합니까? 아니면 MySQL을 활용하여이 문제를 해결할 다른 방법이 있습니까? – swisscheese

+0

적어도 오라클 컨텍스트에서는 문제가 발생하지 않습니다. 중첩 된 방식은 표준 SQL 구문을 사용하기 때문에 이식성이 뛰어납니다. 일반적인 맥락에서 나는 apple _reference_의 중복과 함께 악을 보지 못했다. 나는 연습에 중첩 된 세트를 사용하지는 않았지만 익숙해졌습니다. 그러나 나는 나무의 변경 (노드의 추가/삭제/이동)에 더 관심이있다. 그들은 일반적으로 더 느립니다. 또한 표준 기술이 아니므로 솔루션 관리자는 어려운 시작이 필요할 수 있습니다. –

+0

이 문제에 도움을 주셔서 감사합니다. 만약 당신이 기회가 있고 기꺼이 내 질문에 대한 다음의 http://stackoverflow.com/questions/5395463/data-modeling-modeling-categories-subcategories-in-mysql을 보시기 바랍니다. – swisscheese

3

중첩 세트 모델은 1 : N (일대 다) 관계에 대한 구조로, M : N (many to many) 관계를 사용하고자합니다 (많은 항목이 사과를 부모로 가질 수 있지만 한 부모).

See this article

Wikipedia

하지만 당신은 계층 M 것을 알고 있어야한다 : N 관계가 정말 빨리 매우 복잡 얻을 수 있습니다!

+0

예이 개념은 이해하지만 중첩 세트 모델에는 적용되지 않습니다. 그래서 내 질문입니다 중첩 된 집합 모델이 처리 할 수 ​​및 방법? – swisscheese

+0

@swisscheese 정말 간단한 방법으로는 할 수 없습니다. 아마도 트리의 참조 (데이터를 보유 할 다른 테이블을 가리키는 항목의 ID) 만 저장하려고 시도 할 수 있습니다. 하지만 중첩 된 집합 모델이이 모델에 정말로 적합하다고 생각하지 않습니다. –

3

여기에서 큰 소리로 생각해보십시오. 그러나 일부 속성 (예 : 빨강, 노랑, 초록)을 '카테고리'대신 '태그'로보고 별개의 로직으로 처리하는 것이 도움이 될 수 있습니다. 그러면 중첩 세트 모델을 유지하고 불필요한 중복을 피할 수 있습니다. 또한 카테고리를 더 간단하게 유지할 수 있습니다.

정보에 대해 어떻게 생각하십니까? 범주는 속성을 나타내는 또 다른 방법 일뿐입니다. 귀하의 모범이 설명을 목적으로 한 것이지만 과일을 색상으로 분류하려면 왜 흰색 고기와 붉은 고기와 같은 방식으로 고기를 분류하지 않습니까? 당신이하지 않을 가능성이 높습니다. 그래서 요점은 색으로 과일을 분류 할 필요가 없다는 것입니다.

대신 일부 속성은 다른 방식으로 더 잘 표현됩니다. 실제로, 가장 단순한 형태로, 그것은 '음식'테이블에 '색'이라는 칼럼으로 기록 될 수 있습니다. 또는 매우 일반적인 속성이고 값을 크게 복제하는 경우 '색상'이라는 별도의 테이블로 분리하여 세 번째 테이블의 각 식품 항목에 매핑 할 수 있습니다. 물론 더 추상적 인 접근법은 테이블을 '태그'로 일반화하고 각 색상을 개별 태그로 포함시켜 모든 식품 항목에 매핑 할 수 있습니다. 그런 다음 많은 수의 태그에 여러 태그 (색상)를 매핑하여 진정한 일대일 관계를 제공하고 카테고리 지정을보다 일반화 할 수 있습니다.

태그가 카테고리인지 또는 태그가 태그인지 여부에 대한 지속적인 토론이 있습니다.하지만 이것은 무료 일 수 있으며 관리가 쉬운보다 추상적이고 강력한 시스템을 만들 수있는 하나의 인스턴스 인 것처럼 보입니다.

+0

나는 생각, 가능한 결과 중 일부를 놓친 경우 확실하지 않지만 좀 태그로 색상을 생각하는 것이 좋습니다. – johnsnails

0

오래된 스레드이지만이 문제에 대한 더 나은 대답을 발견했습니다.

사과의 색이 다르기 때문에 구조는 나무가 아닌 그래프입니다. 중첩 된 세트 모델은 올바른 구조가 아닙니다.

당신이 Mysql을 사용하고 있다는 코멘트에서 언급 했으므로 더 나은 해결책은 기본적으로 관계를 설정하는 특별한 테이블을 만들 수있는 MySQL 플러그인 인 쿼리 그래프 열기 엔진 (http://openquery.com/graph/doc)을 사용하는 것입니다. parentId 및 childId. 마술은 쿼리에 전달 된 값에 따라 특수 열 래치를 사용하여이 테이블을 쿼리하면 OQGRAPH 엔진에 어떤 명령을 실행할지를 알려줍니다. 자세한 내용은 문서를 참조하십시오.