2013-07-04 2 views
0

다음 저장 및 검색을 위해 관계형 데이터베이스를 구성해야합니다. 키워드 이 메시지 :키워드의 관계형 데이터베이스 구성

message1 (key word1, kw2, kw3) 
message2 (kw2, kw3, kw4) 
... 

다음, 당신은 대부분 일치 키워드가 볼 수있는 메시지를 선택하는 일련의 키워드에 필요합니다.

에 대한 예를 들어 : kw2, kw4 :

message2, count: 2 
message1, count: 1 

가 어떻게 이러한 구조를 구성하는 것이 가장 생각하십니까? 가장 빠르고 가장 빨리 검색하는 방법은 무엇입니까?

답변

0

교차 테이블이 이러한 관계를 처리 할 수 ​​있습니다.
아래 예가 있습니다. (시퀀스, 추가 키 등 생략) 예를 들어 message_text가 포함되어 있습니다. 메시지 데이터가 변경 될 수있는 경우 전체 텍스트가 문제가 될 수 있습니다.

SELECT 
MESSAGES.MESSAGE_TEXT 
,KEYWORDS.KEYWORD 
FROM MESSAGES 
INNER JOIN MESSAGES_KEYWORDS 
USING (MESSAGE_ID) 
INNER JOIN KEYWORDS 
USING (KEYWORD_ID) 
WHERE KEYWORDS.KEYWORD = 'HOBBIT'; 

SELECT 
MESSAGES.MESSAGE_ID 
,COUNT('X') COUNT_KEYWORDS 
FROM MESSAGES 
INNER JOIN MESSAGES_KEYWORDS 
ON (MESSAGES.MESSAGE_ID = MESSAGES_KEYWORDS.MESSAGE_ID) 
AND MESSAGES.MESSAGE_ID = 1 
INNER JOIN KEYWORDS 
USING (KEYWORD_ID) 
GROUP BY MESSAGES.MESSAGE_ID; 
:의 관계를 쿼리

CREATE TABLE MESSAGES 
(MESSAGE_ID INTEGER NOT NULL PRIMARY KEY 
,MESSAGE_TEXT VARCHAR2(4000)); 

CREATE TABLE KEYWORDS 
(KEYWORD_ID INTEGER NOT NULL PRIMARY KEY 
,KEYWORD VARCHAR2(100)); 

CREATE TABLE MESSAGES_KEYWORDS 
(MESSAGE_ID NOT NULL REFERENCES MESSAGES 
,KEYWORD_ID NOT NULL REFERENCES KEYWORDS); 

INSERT INTO MESSAGES 
VALUES 
(1,'IN A HOLE IN THE GROUND THERE LIVED A HOBBIT.'); 

INSERT INTO MESSAGES 
VALUES 
(2,'IT WAS A HOBBIT-HOLE, AND THAT MEANS COMFORT'); 

INSERT INTO KEYWORDS VALUES (1,'HOBBIT'); 
INSERT INTO KEYWORDS VALUES (2,'GROUND'); 
INSERT INTO KEYWORDS VALUES (3,'COMFORT'); 

INSERT INTO MESSAGES_KEYWORDS VALUES (1,1); 
INSERT INTO MESSAGES_KEYWORDS VALUES (1,2); 
INSERT INTO MESSAGES_KEYWORDS VALUES (2,1); 
INSERT INTO MESSAGES_KEYWORDS VALUES (2,3); 

는 세 개의 테이블을 조인

관련 문제