Комната с многопользовательской базой данных в одном приложении для Android - PullRequest
0 голосов
/ 21 ноября 2018

Можем ли мы иметь несколько баз данных в одном приложении для Android, используя Room?Я хочу создать новую базу данных для каждого пользователя.Если пользователь user1 вошел в систему, я должен создать базу данных для этого пользователя, такую ​​как UserDB1. Если добавлена ​​какая-либо новая учетная запись, я должен создать другую базу данных для этого пользователя, такую ​​как UserDb2.Если между этими учетными записями произошло переключение между учетными записями, я должен получить доступ к пользовательской базе данных. Как мне этого добиться?

Ответы [ 2 ]

0 голосов
/ 28 апреля 2019

Я сделал это, как показано ниже,

    private static AppDatabase buildDatabase(final Context appContext, int userId) {
    return Room.databaseBuilder(appContext, AppDatabase.class, DATABASE_NAME + "_" + userId)
            .addCallback(new Callback() {
                @Override
                public void onCreate(@NonNull SupportSQLiteDatabase db) {
                    super.onCreate(db);

                }
            })
        .build();
}

Я полностью понимаю ваше требование.Есть 3 способа (скажем, нужна только таблица userTable, но на самом деле у нас их больше.)

  1. Создайте базу данных для каждого входящего в систему пользователя.(Вы спросили, я тоже его использовал)
  2. Только база данных, но создайте таблицу для каждого пользователя, например userTable_1.(Кажется, что Room не может это поддерживать)
  3. Только база данных и таблица для всех пользователей, поэтому мы должны добавить дополнительный столбец user_id к таблице;если у нас есть 20 таблиц, мы должны добавить «user_id» для всех 20 таблиц.(В большинстве случаев мы делали это в бэкэнд-разработке; но в данном случае я действительно НЕ предпочитаю это)
0 голосов
/ 21 ноября 2018

Возможно, вы могли бы, но этот подход неверен по нескольким причинам.Вы не создаете отдельные базы данных для пользователей, вы создаете таблицы с отношениями друг к другу, каждая строка является записью для пользователя.
Некоторые таблицы имеют отношение «один ко многим», например, таблица, содержащая порядковые номера.У одного пользователя может быть много заказов.Или таблица может иметь отношение один-к-одному, как профиль пользователя.То, к чему это приводит, состоит в том, что у каждого пользователя есть уникальная запись и идентификатор, этот идентификатор будет относиться к другим таблицам с их данными.Вы используете идентификатор для входа в систему, чтобы получить свои данные.Кроме того, вам действительно не следует хранить данные других людей в вашем приложении. В какой ситуации вы чувствуете, что несколько человек будут использовать один и тот же телефон для приложения?Идеальная ситуация - иметь облачный сервер / базу данных, с которой вы получаете данные, чтобы получать данные только текущих пользователей.
Последняя причина, по которой вы не делаете несколько баз данных, заключается в том, что если вы хотите добавить новое поле, вы бынеобходимо обновить каждую созданную БД вместо одной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...