【问题标题】:The organization of a relational database of keyword关键词关系数据库的组织
【发布时间】:2013-07-04 17:49:34
【问题描述】:

需要组织一个关系数据库来存储和搜索下一个。 有关键字的消息:

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

接下来,您需要使用一组关键字来选择那些与关键字最匹配的消息。

例如对于:kw2、kw4:

message2, count: 2
message1, count: 1

您认为如何组织这样的结构最好?最好和最快的搜索方式是什么?

【问题讨论】:

    标签: sql database relational-database


    【解决方案1】:

    交集表可以处理这些关系。
    下面是一个例子。 (序列、附加键等省略) message_text 仅用于示例 - 如果消息数据可能发生更改,则包含全文可能是一种责任。

    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);
    

    查询关系连接三个表:

    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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-28
      • 1970-01-01
      • 1970-01-01
      • 2016-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-12
      相关资源
      最近更新 更多