2010-05-15 4 views
4

이미지 공유 사이트에서 작업 중이고 이미지에 태그 지정을 구현하려고합니다.이 태깅 솔루션은 얼마나 효과적 일 수 있습니까?

내가 질문 #20856#2504150

읽은 나는 위의 질문에 대한 접근 방식과 몇 가지 문제가 있습니다. 우선 이미지를 태그에 쉽게 연결할 수 있습니다. 그러나 태그 관계로 이미지를 가져 오는 것은 쉽지 않습니다. 하나의 테이블에서 이미지 - 태그 관계를 가져온 다음 여러 OR 문 (모든 이미지에 대해 하나 또는 두 개의 OR 문)으로 큰 쿼리를 작성해야하기 때문에 쉽지 않습니다.

난 내가 다음과 같은 방법을 테스트 시작 태그 주제를 연구하기 전에 다음을 예로

이 테이블 :

Table: Image 
Columns: ItemID, Title, Tags 

Table: Tag 
Columns: TagID, Name 

태그 이미지 테이블에 열이 여러 문자열을 걸립니다 tagID태그 대시 (-)로 묶인 표.

-65-25-105- 

링크 나는 내가 을 얻을 수있는 더 쉽게 태그로 이미지를 얻기 위해 찾아이 방법으로 TagID 65,25 및 105

와 이미지 : 예를 들어

TagID 하나 개의 쿼리와 같은 다른 간단한 쿼리와 함께 모든 이미지를 얻을 : 그래서 만약

SELECT * FROM Image WHERE Tags LIKE %-65-% 

전 이 방법을 태그 지정에 사용하십시오.

얼마나 효과적입니까?

LIKE % -65- % 느린 프로세스로 쿼리하고 있습니까?

앞으로 어떤 문제가 발생할 수 있습니까?

답변

4

3 개의 테이블이 필요합니다.

Table: Image 
Columns: ImageId, ItemID, Title 

Table: Image_Tag 
Columns: ImageId, TagId 

Table: Tag 
Columns: TagID, Name

그런 다음 사용하는 것이 태그에 대한 모든 이미지를 얻을 수 있습니다 :

SELECT ImageId, Title 
FROM Image_Tag LEFT JOIN Image USING (ImageId) 
WHERE TagId = $TagId

이 관계형 데이터베이스에 다 대다 관계를 처리하는 전형적인 방법입니다. 당신은 아마도 약 http://en.wikipedia.org/wiki/Database_normalization

편집 : 나는 당신이 참조한 다른 질문에서 이미 주소를 참조하십시오, 그래서 내가 더 설명해 줄 것입니다. 내가하는 것처럼 보이는 가장 큰 문제는 id 컬럼의 인덱스를 활용할 수 없기 때문에 쿼리의 효율성이 떨어진다는 것입니다. 그것은 또한 업데이 트에 대한 서투른 것처럼 보입니다. 나는 그런 식으로하려고하지 않는 것이 좋습니다, 적어도 3 테이블 솔루션을 사용해보십시오. 일단 당신을 위해 "클릭"하면 당신은 저에게 감사 할 것입니다.

+1

의견을 보내 주셔서 감사합니다. LEFT JOIN에 대한 이야기를 많이 읽었습니다. 나는 3 개의 테이블을 가지고 갈 것이고 사람들은 이것을 정말로 파헤치는 것 같다. – Pablo

관련 문제