2009-11-23 2 views
2

관련 키워드 세트를 데이터베이스에 저장해야합니다.관련 키워드를 저장하기위한 db 스키마에 대한 제안 사항이 있습니까?

저장하려면 키워드 스스로 : 지금, 나는 다음을 사용하여 생각하고

CREATE TABLE relatedkeywords(
    id int(11) AUTO_INCREMENT PRIMARY KEY, 
    keyword1 int(11), 
    keyword2 int(11), 
    FOREIGN KEY (keyword1) REFERENCES keywords(id), 
    FOREIGN KEY (keyword2) REFERENCES keywords(id) 
); 

:

CREATE TABLE keywords(
    id int(11) AUTO_INCREMENT PRIMARY KEY, 
    word VARCHAR(255) 
); 

는 관계 (저장 관련 키워드의 ID를) 저장하려면 이것이 관례입니까, 아니면 이것을하는 더 좋은 방법이 있습니까? 내가보고있는 유일한 문제는 때때로 관련 키워드를 가져올 수 있도록 두 열을 모두 확인해야한다는 것입니다. 여기에 뭔가 빠져있을 수도 있습니다.

+0

, 오른쪽 FOREIGN KEY의 KEYWORD1하는 제약과 KEYWORD2를 추가하는 의미는? – Dmitry

+0

예 .. 죄송합니다 ... 내 게시물을 업데이트했습니다. 그 두 진술을 잊어 버렸습니다 :) 그 점을 지적 해 주셔서 감사합니다. – Legend

+0

'parent_keyword' 및'child_keyword'와 같은 더 나은 열 이름을 선택하면 관계가보다 명확 해집니다. 또한 '관련성'이 더 짧지 만 사실 키워드 [하위] 분류를 정의하고 있습니다. –

답변

3

"관련성"이 키워드의 한 쌍의 속성 인 경우,이 스키마는 OK입니다 (UNIQUE를 추가하는 것을 잊지 마세요 (KEYWORD1, KEYWORD2))

이 "관계 성"은 일련의 키워드를 확산 할 수 있습니다 관련 키워드 세트에 추가 속성이있을 수 있으므로 키워드와 세트 사이에 새로운 테이블 "Related_Set"과 M : N 관계 "Keyword_Set"을 추가 할 수 있습니다.

세트가 추가 속성이없는 경우, 당신은 단지 "Keyword_Set"테이블

+0

네, 고유, 중요합니다, 좋은 지적입니다! +1 –

+0

나는 기본 키를 * keyword1과 keyword2 칼럼 모두로 정의 할 것이다. 'id' 칼럼을 검색하거나 사용하는 일은 거의 없습니다. 이것은 사용자에게 결코 표시하지 않고 참조 할 수있는 정보입니다. –

+0

감사합니다. 아마도 나는 관련 세트를 사용하지 않을 것이므로 지금은 간단한 세트로 충분할 것입니다. 고맙습니다. – Legend

2

단순화 두 번째 테이블에 살 수있다 :이 같은

CREATE TABLE relatedkeywords(
    keyword1 int(11), 
    keyword2 int(11), 
    FOREIGN KEY (keyword1) REFERENCES keywords(id), 
    FOREIGN KEY (keyword2) REFERENCES keywords(id), 
    PRIMARY KEY (keyword1, keyword2) 
) 

이 사례 중 하나입니다 "인위적인 기본 키"는 거의 이해가되지 않으며 실용적인 유용성을 제공하지 않습니다.

+0

감사합니다. 나는 그것을 수정할 것이다. – Legend

1

하나 개의 테이블이있는 해결책이 -

create table keywords (
    keywrd varchar (40) not null primary key, 
    related_keys_csv varchar(400) 
) 
+0

이 문제는 관련 키가 varchar (400)를 초과하는 경우에만 발생한다고 생각합니다. 나는 틀릴 수 있었다. 그리고 두 가지 방법으로, 두 테이블 접근법에서 두 개의 열을 검색하여 모든 키워드의 관련 키워드를 얻습니다. 하지만 여기에서는 다른 관련 키워드를 얻기 위해 많은 텍스트 덩어리를 검색해야합니다. 나는 결국 효율성이 낮추는 것 같아요. – Legend

+0

각 키워드가 6 개의 관련 키워드를 가지고 있다면, 하나의 select 구문에서 6 개의 키워드를 모두 칠 수 있습니다. 6 개의 선택을 수행 할 필요가 없습니다. 그것의 더 많은 사전 데이터 구조 (파이썬 말하기) 각 이름 (귀하의 원래 키워드) 관련 키워드의 컬렉션을 가지고 ... 따라서 그것의 컬렉션 개념 - 하나의 요소가있는 집합이 아닙니다. – blispr

관련 문제