SQLite中的简单书签管理器

问题描述

| 我想准备一个简单的sqlite数据库用于存储(标记)Internet书签,因为似乎没有简单的工具可以执行此操作。 我想我可以有三个表,一个用于URL,另一个用于标签,另一个用于URL和标签间的关系。 例如: 网址: 1:http://www.google.com/ 2:http://maps.google.com/ 标签: 1:谷歌 2:地图 3:搜寻 关系: 1:1 1:1 1:1:3 1:2:1 1:2:2 问题是我对sqlite的了解很少,而我发现使用\“ map \”标记检索所有URL的唯一方法是通过嵌套选择:
select name from url where id=(
   select url_id from rel where tag_id=(
      select id from tag where name = \'map\'
   )
);
手动存储书签也很无聊。 那么,有没有更有效的方法来实现这一目标? 谢谢。     

解决方法

        
--
-- 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,2);
INSERT INTO urltags VALUES (null,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\';