SQLite的新功能-如何存储包含子对象和数组的对象列表的数据?

我正在尝试使用以下格式存储数据,并且不确定在SQLite中进行组织的最佳方法:

-主要项目

-字段1

-字段2

-字段3(主图像)

----图像路径

----拍摄日期图像

-字段4

-字段5(图像阵列)

----每个图像都是上面的路径和日期对

我当时在想2张桌子? 1为主要项目,主要图像路径和日期仅是两个特定列;那么第二张表将是ID与主要商品相关联的图片列表?

有更好的方法吗?似乎管理和更新两个表都比较麻烦,但是如果那是最好的方法,那就是这样

penglaoda 回答:SQLite的新功能-如何存储包含子对象和数组的对象列表的数据?

如评论中所述,您应该阅读有关关系数据库的基础知识。数据库的词汇不同于编程的词汇。 SQLite是一个基本的数据库引擎,仅支持基本数据类型,因此在学习了关系数据库概念之后,您应该专门阅读sqlite。

以下是您的问题的非正式摘要:

  1. 您的数据模型需要两个表。
  2. 您所谓的“字段”是表中的“列”。列的类型为INTEGER或TEXT(https://www.sqlite.org/datatype3.html)。
  3. 数组用外键(https://sqlite.org/foreignkeys.html)表示。外键是通过匹配另一个表的特定列中的唯一值来引用另一列中的记录的属性。您可以通过从表中选择与您关心的对象相匹配的外键记录来构建值数组。
  4. 请注意,通常不需要应用程序中的SQL代码。尝试寻找一个框架或对象关系映射器(ORM),该框架或对象负责将数据库表映射到对象,将列映射到属性并为您处理持久性和架构更新。我可以说,从经验来看,手动SQL代码难以维护,并且使测试变得非常复杂。

您的特定问题可以通过以下模式解决:

CREATE TABLE mainitem(
  id        INTEGER PRIMARY KEY,field1    TEXT,field2    INTEGER
);

CREATE TABLE image(
  id          INTEGER PRIMARY KEY,datetaken   TEXT,path        TEXT,mainitem    INTEGER,FOREIGN KEY(mainitem) REFERENCES mainitem(id) 
);

ALTER TABLE mainitem
ADD COLUMN mainimage INTEGER REFERENCES mainitem(id) DEFAULT NULL;

要获取图像数组,其中主项目的ID == 3:

SELECT * FROM image WHERE mainitem = 3;

要获得带有其主图像的主要物品:

SELECT * 
FROM mainitem 
LEFT OUTER JOIN image 
ON mainitem.mainimage = image.id
WHERE mainitem.id = 3;
本文链接:https://www.f2er.com/3114154.html

大家都在问