Здесь приведена поправка к «надёжному» подходу Билла Карвина, используя составной ключ ( place_type, place_id )
для устранения предполагаемых нарушений нормальной формы:
CREATE TABLE places (
place_id INT NOT NULL UNIQUE,
place_type VARCHAR(10) NOT NULL
CHECK ( place_type = 'state', 'country' ),
UNIQUE ( place_type, place_id )
);
CREATE TABLE states (
place_id INT NOT NULL UNIQUE,
place_type VARCHAR(10) DEFAULT 'state' NOT NULL
CHECK ( place_type = 'state' ),
FOREIGN KEY ( place_type, place_id )
REFERENCES places ( place_type, place_id )
-- attributes specific to states go here
);
CREATE TABLE countries (
place_id INT NOT NULL UNIQUE,
place_type VARCHAR(10) DEFAULT 'country' NOT NULL
CHECK ( place_type = 'country' ),
FOREIGN KEY ( place_type, place_id )
REFERENCES places ( place_type, place_id )
-- attributes specific to country go here
);
CREATE TABLE popular_areas (
user_id INT NOT NULL,
place_id INT NOT NULL,
UNIQUE ( user_id, place_id ),
FOREIGN KEY ( place_type, place_id )
REFERENCES places ( place_type, place_id )
);
. Что этот проект не может гарантировать, что для каждой строки в places
существует строка из states
или countries
(но не для обоих). Это ограничение внешних ключей в SQL. В полной СУБД, совместимой со стандартами SQL-92, вы можете определить отложенные ограничения между таблицами, которые позволят вам достичь того же, но они неуклюжи, связаны с транзакцией, и такая СУБД еще не вышла на рынок.
Попробуйте инициализировать список replyModel во внутреннем цикле for, кажется, что все элементы добавляются в один и тот же список и добавляются в один и тот же список со всеми ключами. Таким образом, получается весь список со всеми ключами.
for(int i=0;i<model.size();i++){
JSONArray replyArrays = replyObject.getJSONArray(String.valueOf(model.get(i).comment_id));
//Initialise inside the loop
ArrayList<ReplyCommentModel> replyModel = new ArrayList();
for(int j=0;j<replyArrays.length();j++){
JSONObject jsonObject1 = replyArrays.getJSONObject(j);
Integer id = jsonObject1.getInt("id");
String name = jsonObject1.getString("name");
String comment_image = jsonObject1.getString("photo");
Integer user_id = jsonObject1.getInt("user_id");
String comment = jsonObject1.getString("comment");
String added_on = jsonObject1.getString("addedon");
String imageURl = Constant.IMAGE_URL+Constant.COMMENT_USER_IMAGE_URL+comment_image;
replyModel.add(new ReplyCommentModel(comment,name,imageURl,added_on,user_id,id));
}
if(replyModel != null){
replyModelMap.put(String.valueOf(model.get(i).comment_id),replyModel);
}
}