将带有外键的DB变成模型,如何处理关系

问题描述 投票:0回答:1

我目前正在开发一个 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 需要排除对部门内部员工的引用。

任何指导或反馈将不胜感激!

sql database database-design architecture
1个回答
0
投票

除此之外,我建议不要在所有字段名称前加上表/实体名称前缀:无论如何,这“只是”命名。这就是我实际定义模型的方式:

class Department 
{
    // fields:
    int id;
    String name;
    // relations:
    List<Employee> employees;
}

class Employee 
{
    // fields:
    int id;
    String name;
    // relations:
    Department department;
}

我的意思是上面的代码只是基本模式的一些伪代码,即在对象图中简单地使用直接对象引用。当然,遍历这样的模型通常并不简单,因为生成的图是循环的,但是使用 id 而不是直接引用使这个问题不再简单:即使使用间接引用,结构仍然是循环的。

也就是说,也许还请记住,在使用 O/RM 时,通常可以将一些属性附加到这些属性上,以微调模型验证/生成/获取策略。

© www.soinside.com 2019 - 2024. All rights reserved.