2010-01-20 4 views
0

У меня есть SQLite базы данных заметок, которые имеют столбцы _id, название, реквизиты, listidКак связать записи базы данных SQL?

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

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

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

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

ответ

1

Есть три таблицы:

NOTE: _id, title, details 

LIST: _id, listname 

NOTES_IN_LIST: note_id, list_id 

Затем, когда вы добавить примечание к списку необходимо добавить новую строку в NOTES_IN_LIST, который соединяет, что («note_id s к списку) примечание (» ы LIST_ID).

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

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

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

К сожалению, это может быть сложно реализовать, поскольку у меня есть база данных, которая предполагает один список для каждой нотной иерархии. Если бы я сделал это изменение в компоновке таблицы, я не уверен, что могу безопасно хранить данные пользователя. – CodeFusionMobile

+0

Как мне изменить существующую базу данных с помощью SQL для соответствия этому формату? – CodeFusionMobile

+0

Добавлено общее описание этого ответа. –

0

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

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

+0

Вы могли бы объяснить немного лучше, пожалуйста? – CodeFusionMobile

0

SQLite 3.6.19+ изначально поддерживает (и претворяет) Внешние ключи см SQLite Foreign Key Support.

+0

Внешние ключи не поддерживали бы связывание более двух заметок вместе. – CodeFusionMobile

Смежные вопросы