2012-02-18 3 views
0

here과 동일한 데이터 모델이 있다고 가정합니다. 세 개의 열이있는 DB 스키마의 동의어

Table: Item 
Columns: ItemID, Title, Content 

Table: Tag 
Columns: TagID, Title 

Table: ItemTag 
Columns: ItemID, TagID 

당신이 stackoverflow에있는 유사로 태그 동의어를 원한다면

, 어디 데이터 모델에서이 정보를 배치 할 것인가? 쉼표로 구분 된 동의어 목록과 함께 하나의 속성 만 추가 하시겠습니까? 아니면 데이터 모델을 조금 변형 하시겠습니까?

SQL 새 항목을 삽입하는 문이 어떻게 생겼습니까? 새 항목이 모든 동의어 또는 하나의 기본 태그 만 연결될 것이며 코드에서 동의어임을 감지해야합니까? 당신이 부드러운가을 삽입하는 것이 좋습니다 접근

, 태그 조작에 의해 검색 및 삭제?

TagSynonym.TagID
Table: Tag 
Columns: TagID 

Table: TagSynonym 
Columns: TagID, Title 

Tag(TagID)에 FK 것와 Title는 PK 것 :

답변

1

변경 Tag 테이블과는 TagSynonym 테이블을 추가합니다. 당신은 또한 "MainSynonym"태그를 원한다면


, 당신은이를 사용할 수 있습니다

Table: Tag 
Columns: TagID 

Table: TagSynonym 
Columns: TagID, Title 

Table: TagMainSynonym 
Columns: TagID, Title 

TagSynonym(TagID, Title)에 FK를 인 PK되는 및 TagMainSynonym(TagID, Title)TagMainSynonym(TagID)와.

그것은 연체 볼 수 있지만 난 단지 사용을 고려했다

+0

(3 표에) 나머지를 할 것입니다 Tag.TagID과 계단식 효과에만 간단한 UPDATE (하나의 행)가 필요합니다 두 개의 태그를 병합 같은 간단한 조작 하나는 주요 동의어의 경우 주요 동의어 또는 "main"의 이름을 포함 할 것이라고 "동의어"열 태그 태그. 두 개의 테이블을 갖는 것이 더 나은가? – xralf

+0

'ItemTag.TagID'는'(TagID)'가 기본 키인'SomeTable (TagID)'에 대한 외래 키 여야합니다. 그러나'TagID'를 사용하면 (현재) 모든 동의어를 확인하고 싶습니다. 맞습니까? 그래서, 나는 다른 테이블을 추가하지 않고도 방법을 보지 못합니다. –

+0

이제 알겠습니다. 두 개의 테이블을 사용하면 태그 삽입, 삭제 및 검색 구현이 더 순수 해집니다. – xralf