2011-02-09 7 views
1

데이터베이스의 여러 개체에 문자열 태그 (완전히 임의의 태그)를 지정해야합니다. 한 가지 해결책은 고전적인 대다 관계 표현입니다 :데이터베이스 개체 (문자열 태그) 태그 지정 및 태그 조회


table Customer  CustomerId, CustomerName 
table Product  ProductId, ProductName 
table Tags   TagId, TagName 
table CustomerTags CustomerId, TagId 
table ProductTags ProductId, TagId 

또 다른 해결책은 순차적으로 조회를 개선하기 위해 PATH secondary XML index에 태그를 나타내는 XML 열이하는 것입니다 :


table Customer  CustomerId, CustomerName, Tags 
table Product  ProductId, ProductName, Tags 

태그입니다 < 태그 > < 태그 이름 = "이 tag1"/ > < 같은 태그가 것 인 XML 컬럼/태그 > 및 태그/같은 PATH 색인/태그

첫 번째 솔루션은 더 빠른 조회를 제공하지만 더 많은 테이블을 추가합니다. 두 번째 해결책은 느리지 만 깨끗합니다.

저는 SQL을 처음 접했고 뭔가를 간과했을 수도 있습니다. 따라서 모든 입력을 매우 높이 평가할 수 있습니다.

답변

2

내 투표가 첫 번째 해결책 일 것입니다.

우선 SQL은 동등한 직선 tbl-bridge-tag 설정보다 SQL Server 2008에서 처리하는 것이 더 느립니다. X로 태그 지정된 모든 제품을 찾으려면 기존 SQL 쿼리가 tag-> product_tag-> product에서 시작됩니다. 당신은 XML indexes을 만들 수 있습니다 (앞에서 언급했듯이). 그러나 그것들은 XML보다 훨씬 더 크며 태그 당 적어도 두 개의 인덱스가 필요합니다 (하나는 기본 코드이고 다른 하나는 VALUE입니다 - PATH 대신 VALUE 보조 인덱스 필요 보조 색인).

두 번째로, 태그의 이름을 변경/삭제하면 각 관련 객체 (제품/고객)의 XML 구조를 거쳐 xml.modify (매우 제한된 지원 - 예 : 한 번에 수정).

+0

태그 삭제시 좋은 점 ... 우수, 감사합니다! – kateroh