我正在用 Java 创建一个非常简单的应用程序,它将在嵌入式 Derby 数据库中存储问题。我决定使用 DAO 模式来访问数据库中的数据。我不能在这个项目中使用 ORM。
一个问题将包含我通常会在关系数据库中使用多对一关系建模的数据。此数据的一个示例是:
一个问题将有一个类别。一类将有多个问题。
一个问题的分数会是 1000、2000 或 3000。一个分数会有很多问题。
考虑到上述情况,我将创建三个表(括号表示列):
问题(id、问题、scoreId、categoryId)
分数(id,分数)
类别(id,类别)
我的第一个问题是:
像我上面建议的那样在三个表中对我的数据进行建模是不好的做法/错误的方法吗?将分数和类别存储在单独的表中是否有任何好处?或者将它们合并到问题表中会更好吗?链接到具有单列的表(id 除外)的多对一关系对我来说似乎是多余的,因为不是存储引用分数/类别表的 id,我们可以简单地存储类别/分数的值(因为类别/分数表不存储任何附加信息)。
我的第二个问题是:
如果在不同的表中建模我的数据是正确的方法,那么我将如何使用 DAO 模式访问数据?我的困惑来自以下几点:
我会创建一个 DAO 来填充一个Question
看起来像这样的模型对象:
public class Question {
String question;
String category;
Integer score;
}
我会像这样创建 DAO 接口的具体实现:
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 模式和多个表采取干净的方法)。为 Score 和 Category 表创建 DAO 真的没有意义..(如果我这样做,我将如何填充我的模型?)
吃鸡游戏
相关分类