如何链接SQL数据库条目?

时间:2010-01-20 23:34:28

标签: sql database sqlite sql-update

我有一个包含_id,title,details,listid

列的备注的SQLite数据库

_id是自动递增的主键
title和详细信息是字符串数据字段
listid是指向另一个表中的列表名称的外键。

我想找到一种方法,让多个列表或注释中的注释以这样的方式链接,即更新一个将更新另一个或通过其他方式同时编辑。

总体目标是在多个列表中包含相同注释的副本,您可以在其中编辑一个,其余更新自动更新。

我想过添加一个额外的列,其中包含一些链接ID,这些列将由所有链接的笔记共享,从而创建一种更新其他笔记的方法。

3 个答案:

答案 0 :(得分:1)

有三张桌子:

NOTE: _id, title, details

LIST: _id, listname

NOTES_IN_LIST: note_id, list_id

然后,无论何时向列表添加注释,都会向NOTES_IN_LIST添加一个新行,将该注释('s note_id)连接到列表('s list_id)。

每当您编辑注释时,只需在注释表中对其进行编辑即可。

每当您列出您拥有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>

嗯,为了将旧笔记转移到新结构,我会:

  • 使用新的自动增量ID字段
  • 创建一个新的notes表
  • 然后选择不同的(注释标题,注释详细信息)到新的注释表
  • 然后将旧的notes表连接到old_title = new_title和old_detail = new_detail上的新notes表,然后从中选择新的note id和旧的list id,然后将结果表插入NOTES_IN_LIST表
  • 然后我认为你可以删除旧笔记表

确保在发生这种情况时没有人编辑或添加备注,否则您将丢失备注。

此外,您需要更新UI以使用新的注释表,将注释放入列表而不是通过复制,而是将新行插入NOTES_IN_LIST等。

答案 1 :(得分:0)

一个音符可以有很多列表,一个列表可以有很多音符。

您需要一个具有音符ID和列表ID

的关联表

答案 2 :(得分:0)

SQLite 3.6.19+原生支持(并强制执行)外键,请参阅SQLite Foreign Key Support