2010-08-05 4 views
2

현재 내 블로깅 시스템을 개발 중입니다. 현재 새 게시물을 만들 때 자신의 선택 항목 범주를 보관할 수있는 옵션이 제공됩니다.MySQL의 문자열 저장 및 검색

현재 범주를 mysql 데이터베이스의 VARCHAR 값으로 저장하고 있습니다. ID 4와 범주에 대한 블로그 포스트를 검색하기 위해 2, 4

제 그때 사용 : 사용자 ID와 카테고리를 선택한 경우의 예로서 필드는 2,4,8 포함될

SELECT col FROM table WHERE LOCATE(',4,', CONCAT(',',col,',')) 

저는 십진수 콤마로 분리 된 값이 좋은 데이터베이스 구조에 관해서는 아무 것도 없다고 (매우 나쁜) 말했습니다.

누구나 나를 가장 효과적인 방법으로 만들 수있는 좋은 방법/기술을 제공 할 수 있습니까? 사전에

감사 SO에 너무 많은 시간을 기록으로

답변

1

유연한 & 강력한 설정 : 현재 쿼리가 될 것

POSTS 
id 
name 
text 

CATEGORIES 
id 
name 

POST_CATEGORIES 
post_id 
category_id 

: 관계형 데이터베이스에

SELECT p.id, p.name, p.text 
FROM posts p 
JOIN post_categories pc 
ON pc.post_id = p.id 
AND pc.category_id = 4; 
0

봐 표준화. 특정 사례에 대해 블로그 콘텐츠 테이블 외에도 카테고리 및 BlogCategories 두 개의 추가 테이블을 만드는 것을 고려하십시오. 카테고리에는 모든 태그/카테고리의 정의가 포함되며 그 외의 것은 없습니다. BlogCategories 테이블은 다차원 상호 참조 테이블이며 블로그 테이블에 대한 외래 키 참조와 Categories 테이블에 대한 외래 키 참조를 포함합니다. 이렇게하면 1 개의 블로그 항목을 여러 범주와 연관시키고 1 개의 범주를 여러 블로그 항목과 연관시킬 수 있습니다.

데이터를 가져 오는 것은 최악의 경우 3 테이블 조인보다 더 어려울 수는 없으며 비즈니스 로직을 파악하기 위해 부분 문자열 비즈니스에서 벗어날 수 있습니다.