Как связать записи базы данных SQL? - PullRequest
0 голосов
/ 21 января 2010

У меня есть база данных заметок SQLite, в которой есть столбцы _id, title, details, listid

_id - это первичный ключ с автоинкрементом
title и подробности - строковые поля данных
listid - это внешний ключ, указывающий на имя списка в другой таблице.

Я бы хотел найти способ иметь заметки, которые находятся в нескольких списках, или заметки, которые связаны таким образом, что при обновлении одного из них обновляется другой или одновременно редактируются другими способами.

Общая цель - иметь копии одной и той же заметки в нескольких списках, где вы редактируете один, а остальные обновляются автоматически.

Я думал добавить дополнительный столбец с идентификатором ссылки, который будет использоваться всеми связанными заметками, создавая способ обновления других заметок.

Ответы [ 3 ]

1 голос
/ 21 января 2010

Три таблицы:

NOTE: _id, title, details

LIST: _id, listname

NOTES_IN_LIST: note_id, list_id

Затем, когда вы добавляете заметку в список, вы добавляете в NOTES_IN_LIST новую строку, которая соединяет эту заметку ('note_id) с списком (' list_id).

Всякий раз, когда вы редактируете заметку, вы просто редактируете ее в таблице ПРИМЕЧАНИЕ.

Всякий раз, когда вы перечисляете содержимое списка, для которого у вас есть идентификатор, вы выбираете что-то вроде:

SELECT title, details
from NOTE
where NOTE._id in (
    SELECT note_id from NOTES_IN_LIST
    where list_id=<your list id>
)

или

SELECT title, details
from NOTE, NOTES_IN_LIST
where
    NOTE._id=NOTES_IN_LIST.note_id
    and
    NOTES_IN_LIST.list_id=<your list id>

Хм, чтобы перевести старые заметки в новую структуру, я бы:

  • создать новую таблицу заметок с новым полем идентификатора автоинкремента
  • затем выберите отчет (название заметки, детали заметки) в эту новую таблицу заметок
  • затем присоедините старую таблицу заметок к новой таблице заметок в old_title = new_title и old_detail = new_detail, затем выберите из этого новый идентификатор заметки и старый идентификатор списка, затем вставьте полученную таблицу в таблицу NOTES_IN_LIST
  • тогда я думаю, что вы можете удалить старую таблицу заметок

Убедитесь, что никто не редактирует и не добавляет заметки, пока это происходит, иначе вы потеряете заметки.

Также вам потребуется обновить пользовательский интерфейс для работы с новой таблицей заметок, помещать заметки в списки не копируя, а вставляя новую строку в NOTES_IN_LIST и т. Д.

0 голосов
/ 21 января 2010

SQLite 3.6.19+ изначально поддерживает (и применяет) внешние ключи, см. Поддержка внешних ключей SQLite .

0 голосов
/ 21 января 2010

В одной заметке может быть много списков, в одном списке может быть много заметок.

вам нужна ассоциативная таблица с идентификатором заметки и идентификатором списка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...