2012-04-03 1 views
0

내 프로젝트에서 다음과 같은 상황이 있습니다. 단일 카테고리와 연관된 일부 태그 값이 있습니다.태그 데이터에 대한 카테고리의 효율적인 저장 및 검색

예 :

Fruits : Apple, Banana, Grape 
Vegetables: Tomato, Cabbage, Brinjal 

자,이를 위해 나는 두 개의 열, Category, Tag와 데이터베이스의 간단한 테이블을 사용하고, 나는 "과일"Category 열의와 "애플, 바나나, 포도"에 저장 Tag 열 (각 태그는 혼수로 구분됩니다). 그리고 select tag from TagsCollection where category='Fruits'; 같은 간단한 SQL 문을 사용하여 단일 범주를 쿼리 할 때 "과일"범주에 속한 모든 태그가있는 문자열을 얻습니다. 테이블은 특정 범주의 단일 인스턴스 만 레코드로 갖게됩니다. 그리고 모든 태그를 이후 처리를 위해 분리해야하기 때문에 프로그래밍 언어 (Java, 여기)에서 comas 문자열을 분리했습니다.

이제 이런 것을 구현하는 가장 이상적인 방법은 무엇일까요? RDBMS 방식의 스토리지 (MySQL)를 계속 진행하거나 & 같은 유형의 데이터를 검색하는 다른 빠른 방법이 있습니까?

답변

0

단일 열의 한 행에 여러 값이 있으므로 현재 디자인이 첫 번째 정규 양식을 위반합니다. 또한 태그 값에 대한 쿼리가 제대로 수행되지 않을 수 있습니다.

정규화 된 디자인 카테고리 및 태그 열을 유지하는 것이지만, 카테고리 및 태그의 각 조합에 대한 별도의 행 것이다 - 그래서 같은 :

Category Tag 
Fruits Apple 
Fruits Banana 
Fruits Grape 
... 
+0

I 의도적 g 기대중인 모든 정상 형태를 무시하고 다중 값 속성을 사용 그 밖의 더 좋은 해결책. 따라서이 방법으로 저장하면 효율적인 매칭을 위해 프로그래밍 프론트에서 각 범주에 대해 HashTable과 같은 것을 사용할 수 있습니다. 그러나 이와 같은 정보를 저장하는 비 데이터베이스 방식이 있습니까? XML의 일종? (XML 기반 저장소를 인식하지 못함) – Kushal

0

이 데이터베이스의 예상 크기에 따라 달라집니다, 그리고 TagsCollection 특히 테이블.

엄청난 수의 레코드 (수십억 개의 레코드와 수십 또는 초당 수백 개의 쿼리를 의미 함)가 필요하지 않은 경우 RDBMS 디자인을 선택하거나 NoSQL 시스템의 경우 다음 중 하나를 선택할 수 있습니다.

관련 문제