如何在SQL数据库中将带有列表的对象保存为属性

问题描述

我想在我的sqflite数据库中存储Day对象的列表。 Day类看起来像这样:

class Day {
  String date; 
  List<DoneTask> doneTasks;
  double score = 0;

Day({this.doneTasks,this.date});
}

DoneTask类:

class DoneTask {
  Category category;
  double score;
  String description;

DoneTask({this.category,this.score,this.description});
}

类别有一个属性ID,这就是我要存储的所有内容

我不知道如何用sqflite实现这一点。 我正在考虑将属性String day添加到DoneTasks类中,以便首先加载DoneTasks,然后将它们分类到Days中。但这对我来说似乎不是一个好的解决方案,有人知道我该如何更好地做到这一点吗?

对于使用sql来说我是一个很新的人,所以id很喜欢简单的答案:

(这是我用于sqflite的内容https://flutter.dev/docs/cookbook/persistence/sqlite

解决方法

如果这是您要使用的数据架构,我建议您使用 noSQL 数据库。当然,我不知道您整个项目的范围,因此出于某种我不知道的原因,SQL 数据库可能更适合。但鉴于您所提供的内容,sqflite 的 noSQL 替代方案似乎是更好的选择。这将允许将记录有效地存储为对象,允许您将对象存储在对象中,而不必创建一堆相互交叉引用的表。这样做对我来说似乎更直观。

,

这是我要保存的方式:

  • 首先创建一个表来保存您的Day对象。在其中仅保存datescore属性。

方法Database().insert返回一个Future<int>,它是新创建的行的ID,因此您可以使用它来保存DoneTask并将它们链接到Day

  • 现在,您可以将List<DoneTask>的每个保存在另一个表中,并将列id_day作为其标识符。

这里是其外观的模型化。 enter image description here