Как реализовать базу данных объектов один-ко-многим в sqlite для android

Я новичок в SQLite и SQL, и я борюсь с тем, как подойти к следующему:

В моем приложении будет отображаться список членов сообщества. Если я нажму член, я увижу список сообщений, сделанных членами. Сообщение - это объект с именем, временем и сообщением. Как сохранить это в базе данных SQLite, чтобы я мог запросить базу данных с помощью userid и получить список сообщений для конкретного пользователя.

У меня есть таблица Users с этими столбцами:

USER_ID | NAME

У меня есть таблица Tweet с этими столбцами:

USER_ID | NAME | TIME | MESSAGE

Мои вопросы: какой лучший подход/структура для link эти две таблицы? Создать новую таблицу твитов для каждого пользователя или сохранить все твиты в одной длинной таблице с твитами для пользователя 1 сначала, а затем для пользователя 2 и т.д.

Мне не обязательно искать дампы кода, а скорее объяснение логики.

Ответ 1

Это типичный сценарий "JOIN", в котором у вас есть отношения "один ко многим" между пользователями и сообщениями.

Вот пример запроса, который отобразит всех пользователей и их сообщения:

SELECT u.User_ID, u.Name, p.Time, p.Message
FROM Users u INNER JOIN Posts p ON u.User_ID = p.User_ID

Это приведет к созданию набора результатов с четырьмя столбцами. Каждая "Чирикать" будет отображаться с соответствующей пользовательской записью. "У". и 'p.' Синтаксис - это псевдонимы таблиц, используемые для упрощения чтения запроса.

Ответ 2

Ответ уже дан и принят уже, но я хотел добавить это.

Для вас нужна одна таблица с пользователями, users. В этой таблице вы сохраняете информацию о пользователе (user_id, name).

В вашей таблице Tweets храните все твиты для всех пользователей. Один твит в строке. Я использую tweet_id как PRIMARY KEY для таблицы Tweets.

Затем вы можете "связать" два кода, выполнив JOIN, как сказал Дейв Сверски.

Например:

Users
--------------------------
user_id   |   user_name
--------------------------
   123    |    'Terry'
   34     |    'Pierre'

Tweets
-----------------------------------------------------------------------
tweet_id |   user_id   |  time      |         message     
-----------------------------------------------------------------------
   0     |    123      | 135646     |  'This is a tweet'
   1     |    123      | 132646     |  'This is another tweet by Terry'
   2     |    34       | 352646     |  'Pierre\ tweet'

Я не уверен, что name для вашей таблицы Tweets. Насколько я знаю, твиты не имеют имени/темы (?). Вы не должны хранить имя пользователя в таблицах Tweets и users.

Для быстрого SQLFiddle перейдите сюда: http://www.sqlfiddle.com/#!2/43492/1/0

Присоединиться

SELECT u.user_id, u.name, t.time, t.message, t.time 
FROM my_users u
INNER JOIN tweets t ON u.user_id = t.user_id

Ответ 3

Вам нужно иметь две таблицы:

1. Пользователи

USER_ID | NAME

2. Tweets

USER_ID | ВРЕМЯ | ПОСЛАНИЕ

Теперь для объяснения:

Таблица 1 представляет пользователей, есть все данные о пользователе, такие как имя, телефон, адрес и т.д.

Таблица 2 предназначена для всех твитов всех пользователей, и есть столбец, который соединяется между пользователем и его твитом. В таблице 2 USER_ID - это внешний ключ, который указывает ровно одну строку в таблице пользователей.

Чтобы получить все твиты для одного пользователя, вы можете написать следующий запрос:

Select TWEETS.MESSAGE, TWEETS.TIME
from Users, TWEETS
where Users.USER_ID = TWEETS.USER_ID
and Users.NAME = "Pierre";