我目前正在开发一个 Dart 项目,我需要在应用程序中表示两个类之间的关系。
这是我正在使用的简化 SQL 架构:
CREATE TABLE department
(
department_id INTEGER PRIMARY KEY,
department_name TEXT
);
CREATE TABLE employee
(
employee_id INTEGER PRIMARY KEY,
employee_name TEXT,
department_id INTEGER,
FOREIGN KEY (department_id) REFERENCES department(department_id)
);
案例1:
class Department
{
int departmentId;
String departmentName;
}
class Employee
{
int employeeId;
String employeeName;
int departmentId;
}
案例2:
class Employee
{
int employeeId;
String employeeName;
}
class Department
{
int departmentId;
String departmentName;
List<Employee> employees;
}
我应该使用其中哪一个?感觉第一种情况对数据库有更好的表示,但是,感觉一直获取项目会很烦人,因为我不能再只做
Department.employee
但是,我尝试了第二种情况,结果是,现在来回转换它们确实很困难,因为在将它们保存到数据库之前,toMap 和 fromMap 需要排除对部门内部员工的引用。
任何指导或反馈将不胜感激!
除此之外,我建议不要在所有字段名称前加上表/实体名称前缀:无论如何,这“只是”命名。这就是我实际定义模型的方式:
class Department
{
// fields:
int id;
String name;
// relations:
List<Employee> employees;
}
class Employee
{
// fields:
int id;
String name;
// relations:
Department department;
}
我的意思是上面的代码只是基本模式的一些伪代码,即在对象图中简单地使用直接对象引用。当然,遍历这样的模型通常并不简单,因为生成的图是循环的,但是使用 id 而不是直接引用使这个问题不再简单:即使使用间接引用,结构仍然是循环的。
也就是说,也许还请记住,在使用 O/RM 时,通常可以将一些属性附加到这些属性上,以微调模型验证/生成/获取策略。