2011-05-30 37 views
3

我想準備一個簡單的SQLite數據庫來存儲(標記的)Internet書籤,因爲看起來沒有簡單的工具可以做到這一點。SQLite中的簡單書籤管理器

我想我可以有三個表格,一個用於URL,另一個用於標籤,另一個用於URL和標籤之間的關係。

例如:

URL:

標籤:

  • 1:谷歌
  • 2:地圖
  • 3:搜索

關係:

  • 1:1:1
  • 1:1:3
  • 1:2:1
  • 1 :2:2

T他的問題是我的SQLite的知識是非常小的,而且我發現一個檢索所有網址以「地圖」標籤的唯一途徑是通過嵌套的選擇:

select name from url where id=(
    select url_id from rel where tag_id=(
     select id from tag where name = 'map' 
    ) 
); 

手動保存書籤是一個無聊的操作了。

那麼,是否有一些更有效的方法來完成這個?

謝謝。

回答

1
-- 
-- URLs 
-- 
CREATE TABLE urls (
    id INTEGER PRIMARY KEY, 
    url TEXT NOT NULL 
); 

-- 
-- Tags 
-- 
CREATE TABLE tags (
    id INTEGER PRIMARY KEY, 
    tag TEXT NOT NULL 
); 

-- 
-- UrlTags 
-- 
CREATE TABLE UrlTags (
    id INTEGER PRIMARY KEY, 
    urls_id INTEGER, 
    tags_id INTEGER, 
    FOREIGN KEY(urls_id) REFERENCES url(id), 
    FOREIGN KEY(tags_id) REFERENCES tags(id) 
); 

-- 
-- URLS sample data 
-- 
INSERT INTO urls VALUES (null, 'http://www.google.com/'); 
INSERT INTO urls VALUES (null, 'http://maps.google.com/'); 

-- 
-- Tags sample data 
-- 
INSERT INTO tags VALUES (null, 'google'); 
INSERT INTO tags VALUES (null, 'map'); 
INSERT INTO tags VALUES (null, 'search'); 

-- 
-- URLtags sample data 
-- Let's say http://www.google.com/ has all 3 tags 
INSERT INTO urltags VALUES (null, 1, 1); 
INSERT INTO urltags VALUES (null, 1, 2); 
INSERT INTO urltags VALUES (null, 1, 3); 

-- http://maps.google.com/ has only the 'map' tag 
INSERT INTO urltags VALUES (null, 2, 2); 

--- The following retrieves all urls associated with the 'search' tag 
--- which I assume will be only http://www.google.com/ 
SELECT url 
FROM urls u INNER JOIN urltags r ON u.id = r.urls_id 
      INNER JOIN tags t ON t.id = r.tags_id 
WHERE t.tag = 'search';