2010-07-08 3 views
0

기사를 분류하는 태그와 기사를 저장하는 시스템을 구축 중입니다. 표준 물건,이 웹 사이트가하는 것과 비슷합니다. 이제 내 질문은 태그와 기사 ID가 포함 된 별도의 테이블에 태그를 저장해야하는지 또는 기사 테이블의 추가 열에 태그를 저장해야하는지 여부이다. 내 첫 번째 본능은 데이터베이스를 정상화하고 두 개의 테이블을 갖는 것입니다. 문제는 사용자가 태그를 관리하는 인터페이스가 모든 태그가 쉼표로 구분 된 간단한 텍스트 상자라는 점입니다. 따라서 사용자가 변경 사항을 커밋 할 때 어떤 태그가 추가, 변경 또는 뺄지를 찾으려면 먼저 데이터베이스에 쿼리하고 태그 기준으로 새 데이터와 비교 한 다음 그에 따라 변경 사항을 처리해야합니다. 기사 테이블의 한 행에 제출 된 기사를 단순히 업데이트하는 것과 비교하면 엄청난 오버 헤드가있는 프로세스입니다. 당신은 어떻게 그것을 할 것이거나 내가 고려하지 않은 세 번째 옵션이 있습니까?기사의 기사 및 태그가있는 데이터베이스를 표준화하는 올바른 전략은 무엇입니까?

PD. 이 프로젝트의 관계형 데이터베이스가 붙어 있습니다.

+0

간단한 문자열 비교는 태그가 항상 같은 순서로 입력되는 경우에만 작동합니다. 한 가지 또는 다른 방법으로 태그별로 태그를 비교해야합니다. – Rene

+0

LIKE 문을 사용할 수 있습니다. –

+0

하지만 끔찍하고 비효율적 인 해킹이 될 수 있습니다. – Yellowfog

답변

0

'T 태그가있는 모든 기사 찾기'와 같은 검색어를 실행하려면 데이터베이스를 정규화해야합니다.

올바른 태그를 적용했다고 가정 할 때 모든 태그를 새 태그와 비교하는 데 많은 오버 헤드가 발생할 것으로 생각하지 않습니다.

개인적으로 개인 태그를 입력 할 때 감사와 같은 일을하고 싶기 때문에 개인적으로 모든 태그를 삭제하지 않고 모든 태그를 삭제합니다.

SQL Server 2008을 사용하는 경우 MERGE 명령을 사용하는 것이 좋습니다.

+0

SQL Server Compact를 사용하므로 MERGE 명령을 사용하지 않습니다. 적어도 내가 찾을 수있는 아무도. –

+0

각 사례에 대해 별도의 삽입, 업데이트 및 삭제 명령문을 작성해야합니다. 트랜잭션에서 랩핑하면 원 자성이 생깁니다. – Yellowfog

1

매번 어떤 태그가 변경되었는지 알아 내려고하기보다는 별도의 테이블을 사용하는 경우 주어진 아티클 ID를 모두 삭제 한 다음 제공된 모든 태그를 삽입하기 만하면되므로 오버 헤드가 거의 발생하지 않습니다.

태그가 지정된 시스템에서 일반적으로 가장 중요한 성능은 태그 검색 및/또는 관련 콘텐츠 검색입니다. 인덱싱 된 태그 열이있는 별도의 테이블을 사용하면 항목에 여러 개의 태그가있을 수있는 상황에서 매우 빠른 조회가 제공됩니다.

+0

그것에 대해 생각했지만 분류되지 않은 기사를 남긴 태그를 삭제 한 후에 문제가 발생하면 작업의 원 자성을 보장 할 방법이 없습니다. 게다가 어떤 태그가 새 것이고 어떤 태그가 제거되었는지 추적 할 수 있습니다. –

+0

이것은 여전히 ​​많은 오버 헤드를 나타내지 않아야하며 실제로 단일 열의 문자열 비교가 아닌 별도의 테이블이 사용되면 해결하기가 더 쉬워야합니다. 이 키는 가장 일반적인 사용법이므로 정보 검색을 위해 최적화하는 것입니다. 심지어 삽입/업데이트시 추가 오버 헤드를 희생합니다. – Macros

관련 문제