我正在用 Java 創(chuàng)建一個非常簡單的應(yīng)用程序,它將在嵌入式 Derby 數(shù)據(jù)庫中存儲問題。我決定使用 DAO 模式來訪問數(shù)據(jù)庫中的數(shù)據(jù)。我不能在這個項目中使用 ORM。一個問題將包含我通常會在關(guān)系數(shù)據(jù)庫中使用多對一關(guān)系建模的數(shù)據(jù)。此數(shù)據(jù)的一個示例是:一個問題將有一個類別。一類將有多個問題。一個問題的分數(shù)會是 1000、2000 或 3000。一個分數(shù)會有很多問題??紤]到上述情況,我將創(chuàng)建三個表(括號表示列):問題(id、問題、scoreId、categoryId)分數(shù)(id,分數(shù))類別(id,類別)我的第一個問題是:像我上面建議的那樣在三個表中對我的數(shù)據(jù)進行建模是不好的做法/錯誤的方法嗎?將分數(shù)和類別存儲在單獨的表中是否有任何好處?或者將它們合并到問題表中會更好嗎?鏈接到具有單列的表(id 除外)的多對一關(guān)系對我來說似乎是多余的,因為不是存儲引用分數(shù)/類別表的 id,我們可以簡單地存儲類別/分數(shù)的值(因為類別/分數(shù)表不存儲任何附加信息)。我的第二個問題是:如果在不同的表中建模我的數(shù)據(jù)是正確的方法,那么我將如何使用 DAO 模式訪問數(shù)據(jù)?我的困惑來自以下幾點:我會創(chuàng)建一個 DAO 來填充一個Question看起來像這樣的模型對象:public class Question { String question; String category; Integer score;}我會像這樣創(chuàng)建 DAO 接口的具體實現(xiàn):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 對象不應(yīng)該只關(guān)心數(shù)據(jù)庫中的一個表嗎?我上面列出的方法似乎不是解決此問題的最正確方法。單獨的表也會使向數(shù)據(jù)庫中插入數(shù)據(jù)變得非常混亂(我不明白如何使用 DAO 模式和多個表采取干凈的方法)。為 Score 和 Category 表創(chuàng)建 DAO 真的沒有意義..(如果我這樣做,我將如何填充我的模型?)
2 回答

吃雞游戲
TA貢獻1829條經(jīng)驗 獲得超7個贊
像我上面建議的那樣在三個表中對我的數(shù)據(jù)進行建模是不好的做法/錯誤的方法嗎?在單獨的表中存儲分數(shù)和類別有什么好處......?
這是一個討論的問題。如果score
我寧愿將此信息與question
. 另一方面,category
將在單獨的表格中,因為更多的問題將共享相同的類別,因此它非常有意義。
每個 DAO 對象不應(yīng)該只關(guān)心數(shù)據(jù)庫中的一個表嗎?
是的,DAO,一個對象應(yīng)該關(guān)注單一的數(shù)據(jù)源——正如你所說。我當(dāng)然會盡量避免任何,ComplexDao
因為這些類往往會變得更復(fù)雜,而且方法的數(shù)量會隨著時間的推移而增加。
存在一個服務(wù)層將這些結(jié)果組合在一起,并使用相同的服務(wù)向控制器提供輸出。
添加回答
舉報
0/150
提交
取消