Как реализовать базу данных объектов один-ко-многим в 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";