我需要在可以遵循的两种方法之间选择最佳方法。
我有一个Flutter应用程序,用于sqflite保存数据,在数据库内部,我有两个表:
sqflite
雇员:
+-------------+-----------------+------+ | employee_id | employee_name |dep_id| +-------------+-----------------+------+ | e12 | Ada Lovelace | dep1 | +-------------+-----------------+------+ | e22 | Albert Einstein | dep2 | +-------------+-----------------+------+ | e82 | Grace Hopper | dep3 | +-------------+-----------------+------+
SQL:
CREATE TABLE Employee( employee_id TEXT NOT NULL PRIMARY KEY, employee_name TEXT NOT NULL , dep_id TEXT, FOREIGN KEY(dep_id) REFERENCES Department(dep_id) ON DELETE SET NULL );
部门:
+--------+-----------+-------+ | dep_id | dep_title |dep_num| +--------+-----------+-------+ | dep1 | Math | dep1 | +--------+-----------+-------+ | dep2 | Physics | dep2 | +--------+-----------+-------+ | dep3 | Computer | dep3 | +--------+-----------+-------+
CREATE TABLE Department( dep_id TEXT NOT NULL PRIMARY KEY, dep_title TEXT NOT NULL , dep_num INTEGER, );
我需要显示ListGrid存储在 Employee 表中的部门。我应该查看 Employee 表并从中获取部门ID,这很容易,但是在获取后,dep_id我需要从这些ID中制作一张卡,因此我需要 Department 表中的信息。我从 Emplyee 表中获取的那些ID的完整信息位于 Department 表中。
ListGrid
dep_id
每个表中有数千行。
我有一个数据库助手类可以连接到数据库:
DbHelper 是这样的:
DbHelper
Future<List<String>> getDepartmentIds() async{ 'fetch all dep_id from Employee table' } Future<Department> getDepartment(String id) async{ 'fetch Department from Department table for a specific id' } Future<List<Department>> getEmployeeDepartments() async{ '''1.fetch all dep_id from Employee table 2.for each id fetch Department records from Department table''' var ids = await getDepartmentIds(); List<Departments> deps=[]; ids.forEach((map) async { deps.add(await getDepartment(map['dep_id'])); }); }
有两种方法:
在dbhelper定义一个函数,所有收益dep_id从 员工 表(getDepartmentIds和其他功能,对于该特定ID返回一个部门的对象(模型)。( getDepartment)
getDepartmentIds
getDepartment
现在,我FutureBuilder彼此之间需要两个,一个用于获取id,另一个用于获取部门模型。
FutureBuilder
getEmployeeDepartments
哪一个更好??我应该让FutureBuilders处理它还是应该施加压力dbHelper以应对它?
dbHelper
如果我使用第一种方法,则必须(据我所能想象的那样!)将第二个以后的调用(基于id()获取 Department Object(model)的那个getDepartment)放在build函数上,建议不要这样做所以。
build
第二个问题是它在中进行了许多嵌套调用dbHelper。
我用来ListView.builder表演。
ListView.builder
我检查了一些数据,但无法弄清楚哪个更好。我猜这取决于flutter和sqlite(sqflite)。
哪个更好,或者有更好的方法?
鉴于在此示例中看不到太多代码,我将对您的问题做一个高级回答。
评估方法一
评估方法二
典型的“无尽”列表方法
最初发出一个查询,例如:取:10,跳过:0按下UI底部时的下一个查询:取:10,跳过:10等。
示例SQL查询:
SELECT * FROM Employees E JOIN Departments D on D.id = E.dept_id order by E.employee_name offset {SKIP#} rows FETCH NEXT {TAKE#} rows only
希望这会有所帮助,就代码而言,我不确定您实际上要做什么。