Простой менеджер закладок в SQLite - PullRequest
3 голосов
/ 30 мая 2011

Я хотел бы подготовить простую базу данных SQLite, которая будет использоваться для хранения (помеченных) интернет-закладок, поскольку кажется, что для этого нет простого инструмента.

Я думаю, у меня может быть тритаблицы, одна для URL, другая для тегов, а другая для отношений между URL и тегами.

Например:

URL:

Метка:

  • 1: Google
  • 2: карта
  • 3: поиск

Отношения:

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

Проблема в том, что мои знания SQLite очень малы, и я нашел единственный способ получить все URL-адреса с помощью тега "map"через вложенный выбор:

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

Ручное хранение закладок тоже скучная операция.

Итак, есть ли более эффективный способ сделать это?

Спасибо.

1 Ответ

1 голос
/ 31 мая 2011
--
-- 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';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...