Как создать таблицу для конкретной учетной записи, используя sqlite в Android Studio? - PullRequest
0 голосов
/ 26 ноября 2018

Я создал таблицу для хранения данных в Android Studio, используя Sqlite.Я использую Facebook SDK, чтобы создать учетную запись через Facebook и сохранить некоторые данные приложения, а не данные Facebook, для этой учетной записи, а затем отобразить ее.Но когда я выхожу и снова вхожу с другой учетной записью, тогда предыдущие данные все еще там.

Я хочу сохранить разные данные для разных учетных записей, поэтому, когда пользователь снова войдет в систему, его данные будут там.

Вопрос: как это сделать?Должен ли я создать еще одну таблицу для хранения данных учетной записи Facebook?И если да, то как связать таблицу данных с конкретной учетной записью?

1 Ответ

0 голосов
/ 27 ноября 2018

Чтобы сделать это относительно просто, но без особой безопасности, добавьте столбец в таблицу (таблицы) для хранения (или представления) учетной записи.Когда вы получаете доступ к данным, включается условие (предложение WHERE), позволяющее выбирать только строки для учетной записи.

Примите во внимание следующее: -

DROP TABLE IF EXISTS fb_account_data_simple;
CREATE TABLE IF NOT EXISTS fb_account_data_simple (_id INTEGER PRIMARY KEY, fb_data TEXT, fb_account TEXT);
INSERT INTO fb_account_data_simple (fb_data, fb_account) VALUES
    ('Face Book Data 001','FRED'),
    ('Face Book Data 002','FRED'),
    ('Face Book Data 001','MARY'),
    ('Face Book Data 003','MARY'),
    ('Face Book Data 004','MARY'),
    ('Face Book Date 003','FRED');
;
SELECT * FROM fb_account_data_simple WHERE fb_account = 'MARY';

This;

  • создает таблицу с именем fb_account_data_simple , которая имеет два столбца 1 для данных и 1 для имени учетной записи личной книги.
  • Затем загружает 6 строк данных по 3 строки для каждой учетной записи.
  • Наконец, он извлекает только строки для учетной записи с именем MARY, в результате чего: -

enter image description here

Однако приведенное выше не нормализованопоскольку одно и то же имя учетной записи хранится несколько раз.

Нормализованная версия будет иметь таблицу для учетной записи и столбец в основной таблице, которая ссылается на учетную запись.

Например, рассмотрим следующее: -

DROP TABLE IF EXISTS fb_account;
CREATE TABLE IF NOT EXISTS fb_account (_id INTEGER PRIMARY KEY, account TEXT);
INSERT INTO fb_account (account) VALUES
    ('FRED'), -- will very likely have an _id value of 1 automatically generated by SQLite
    ('MARY')  -- will very likely have an _id value of 2 automatically assigned by SQLite
;
DROP TABLE IF EXISTS fb_data;
CREATE TABLE IF NOT EXISTS fb_data (_id INTEGER PRIMARY KEY, fb_data TEXT, account_reference INTEGER);
INSERT INTO fb_data (fb_data, account_reference) VALUES
    ('Face Book Data 001',1),
    ('Face Book Data 002',1),
    ('Face Book Data 001',2),
    ('Face Book Data 003',2),
    ('Face Book Data 004',2),
    ('Face Book Date 003',1);
;
SELECT fb_data, account 
    FROM fb_data
        JOIN fb_account ON account_reference = fb_ACCOUNT._id
    WHERE account = 'MARY'

This;

  • создает таблицу для учетных записей
  • , затем загружает две учетные записи.
  • , затем создаеттаблица для данных
  • , затем он загружает некоторые данные дляr обе учетные записи (используя уникальный идентификатор строки для учетной записи)
  • затем извлекает данные из таблицы данных и получает соответствующие данные из учетной записи через JOIN

Конечный результат такой же (насколько данные полезны для конечного пользователя): -

enter image description here

Хотяэто кажется более трудоемким для того же результата, он считается лучшим методом, поскольку он более эффективен (цифровые ключи / индексы, как правило, быстрее обходятся и используют меньше памяти и, следовательно, уменьшают накладные расходы ввода-вывода)

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

...