Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 数据建模和使用DAO模式访问数据_Java_Relational Database_Data Modeling_Dao - Fatal编程技术网

Java 数据建模和使用DAO模式访问数据

Java 数据建模和使用DAO模式访问数据,java,relational-database,data-modeling,dao,Java,Relational Database,Data Modeling,Dao,我正在用Java创建一个非常简单的应用程序,将问题存储在嵌入式Derby数据库中。我决定使用DAO模式访问数据库中的数据。我不能在这个项目中使用ORM 一个问题将包含我通常使用关系数据库中的多对一关系建模的数据。该数据的一个例子是: 一个问题将有一个类别。一个类别将有多个问题。 一道题的分数为1000分、2000分或3000分。分数会有很多问题。 考虑到上述内容,我将创建三个表,括号表示列: 问题id,问题,分数id,类别id 分数id,分数 类别id,类别 我的第一个问题是: 像我上面建议的那

我正在用Java创建一个非常简单的应用程序,将问题存储在嵌入式Derby数据库中。我决定使用DAO模式访问数据库中的数据。我不能在这个项目中使用ORM

一个问题将包含我通常使用关系数据库中的多对一关系建模的数据。该数据的一个例子是:

一个问题将有一个类别。一个类别将有多个问题。 一道题的分数为1000分、2000分或3000分。分数会有很多问题。 考虑到上述内容,我将创建三个表,括号表示列:

问题id,问题,分数id,类别id 分数id,分数 类别id,类别 我的第一个问题是:

像我上面建议的那样,在三个表格中对我的数据进行建模,这是一种糟糕的做法/错误的做法吗?将分数和类别存储在单独的表中有什么好处吗?还是将它们合并到问题表中更好?对于我来说,链接到具有单列(id除外)的表的多对一关系似乎是多余的,因为不存储引用分数/类别表的id,我们可以简单地存储类别/分数的值,因为类别/分数表不存储任何附加信息

我的第二个问题是:

如果跨单独的表建模数据是正确的方法,那么如何使用DAO模式访问数据?我的困惑来自以下几点:

我将创建一个DAO来填充一个问题模型对象,该对象看起来有点像这样:

public class Question {
    String question;
    String category;
    Integer score;
}
public class QuestionAccessObject implements QuestionDao {
    private static final String TABLE_1 = "QUESTION"; 
    private static final String TABLE_2 = "SCORE";
    private static final String TABLE_3 = "CATEGORY";

    @Override
    public List<Question> getAllQuestions() {
        List<Question> questions = new ArrayList<>();

        //Run a query with joins across the three tables and iterate over the result to populate the list
        return questions;
    }
}
我将创建一个DAO接口的具体实现,如下所示:

public class Question {
    String question;
    String category;
    Integer score;
}
public class QuestionAccessObject implements QuestionDao {
    private static final String TABLE_1 = "QUESTION"; 
    private static final String TABLE_2 = "SCORE";
    private static final String TABLE_3 = "CATEGORY";

    @Override
    public List<Question> getAllQuestions() {
        List<Question> questions = new ArrayList<>();

        //Run a query with joins across the three tables and iterate over the result to populate the list
        return questions;
    }
}
每个DAO对象不应该只与数据库中的一个表有关吗?我上面列出的方法似乎不是最正确的方法。单独的表也会使将数据插入数据库变得非常混乱,我不明白如何使用DAO模式和多个表来采取干净的方法。为分数表和类别表创建DAO是没有意义的。。如果我这样做了,我将如何填充我的模型

像我上面建议的那样,在三个表格中对我的数据进行建模,这是一种糟糕的做法/错误的做法吗?将分数和类别存储在单独的表中有什么好处吗

这是一个讨论的问题。为了避免得分,我宁愿把这些信息和问题联系在一起。另一方面,类别将在单独的表格中,因为更多的问题将共享同一类别,因此这是一个完美的选择

每个DAO对象不应该只与数据库中的一个表有关吗

是的,DAO,一个对象应该与一个数据源有关——正如您所说的。我当然会尽量避免任何ComplexDao,因为这些类往往会变得更复杂,并且方法的数量会随着时间的推移而增加

存在一个服务层来将这些结果组合在一起,并使用完全相同的服务向控制器提供输出

像我上面建议的那样,在三个表格中对我的数据进行建模,这是一种糟糕的做法/错误的做法吗?将分数和类别存储在单独的表中有什么好处吗

这是一个讨论的问题。为了避免得分,我宁愿把这些信息和问题联系在一起。另一方面,类别将在单独的表格中,因为更多的问题将共享同一类别,因此这是一个完美的选择

每个DAO对象不应该只与数据库中的一个表有关吗

是的,DAO,一个对象应该与一个数据源有关——正如您所说的。我当然会尽量避免任何ComplexDao,因为这些类往往会变得更复杂,并且方法的数量会随着时间的推移而增加


存在一个服务层来将这些结果组合在一起,并使用完全相同的服务向控制器提供输出。

跨单独的表对数据进行建模是正确的方法,但不一定是最好的方法

分离表有助于数据库规范化:

有人可能认为DAO模式意味着每个DAO对象都与单个实体有关。与ORMs的工作方式类似,实体可以很容易地引用其他实体

查询问题时,还可以返回问题对象内的类别和分数id,并强制库用户使用这些id值及其各自的DAOs分数和类别来获取分数值和类别值

所以我相信你所做的一切似乎都很好


希望这有助于

跨单独的表建模数据是正确的方法,但不一定是最好的方法

分离表有助于数据库规范化:

有人可能认为DAO模式意味着每个DAO对象都与单个实体有关。 与ORMs的工作方式类似,实体可以很容易地引用其他实体

查询问题时,还可以返回问题对象内的类别和分数id,并强制库用户使用这些id值及其各自的DAOs分数和类别来获取分数值和类别值

所以我相信你所做的一切似乎都很好

希望这有帮助