Comment mettre en œuvre un-à-plusieurs objets de base de données sqlite pour android
Je suis assez nouveau à SQLite
et SQL
et je suis aux prises avec la façon d'aborder le suivant:
Mon application affiche une liste des membres de la communauté. Si je clique sur un membre, je peux voir une liste des messages postés par les membres. Un post est un objet avec le nom, l'heure et le message. Comment puis-je stocker dans un SQLite
base de données de sorte que je peux interroger la base de données par userid
et obtenir la liste des postes pour un utilisateur spécifique.
J'ai un tableau avec les colonnes suivantes:
USER_ID | NAME
J'ai un Tweet de la table avec les colonnes:
USER_ID | NAME | TIME | MESSAGE
Mes questions sont: quelle est la meilleure approche /structure de link
ces deux tableaux? Dois-je créer un nouveau tweet table pour chaque utilisateur, ou puis-je stocker tous les tweets en une longue table avec des tweets de l'utilisateur 1 d'abord, puis pour l'utilisateur 2 etc?
Je ne suis pas nécessairement à la recherche de code de décharges, mais plutôt une explication de la logique.
tweet_id
au Tweet de la table et ensuite stocker une ligne pour chaque tweet.Merci, je vais essayer ça.
Vous devrez peut-être supprimer un tweet dans l'avenir. Terry approche est plus clair de le faire, en raison de la tweet_id
Merci, bon à savoir.
OriginalL'auteur Pierre Rymiortz | 2012-10-10
Vous devez vous connecter pour publier un commentaire.
C'est un type de "REJOINDRE" scénario où vous avez un un-à-plusieurs relation entre les Utilisateurs et les Postes.
Voici un exemple de requête qui affiche tous les utilisateurs et leurs messages:
Ceci va produire un jeu de résultats avec quatre colonnes. Chaque "Tweet" sera affiché avec son enregistrement de l'Utilisateur. Le "u". et " p.' la syntaxe sont des alias de table utilisé pour faire la requête la plus facile à lire.
Normalisé bases de données contiennent généralement une table par "type" de stockage de données, donc il n'est pas nécessaire de créer d'autres tables. Vous pouvez ajouter des utilisateurs et des postes liés à ces deux tableaux.
OK, claire. Un grand merci pour ces rapide, compétent et serviable réponse.
Disons que le total des postes sont 4 donc, la requête ci-dessus sera de retour le 4 rangées, chaque rangée de
u.Name
(redondant)?OriginalL'auteur Dave Swersky
Une réponse a été donnée et acceptée déjà, mais je voulais ajouter ceci.
Ce que vous voulez, c'est un tableau avec les utilisateurs,
users
. Dans ce tableau vous permet de stocker vos informations d'utilisateur (user_id
,name
).Dans votre
Tweets
table, de stocker tous les tweets pour tous les utilisateurs. Un tweet par ligne. Je suis en utilisanttweet_id
commePRIMARY KEY
pour laTweets
table.Vous pouvez ensuite 'link' les deux dans le code en faisant un
JOIN
comme Dave Swersky dit.Par exemple:
Je ne suis pas sûr de ce que
name
est dans votreTweets
table. Autant que je sache, les tweets n'ont pas de nom/objet(?). Vous ne pas besoin de stocker le nom d'utilisateur dans les deuxtweets
etusers
table.Pour un rapide SQLFiddle, rendez-vous ici: http://www.sqlfiddle.com/#!2/43492/1/0
Rejoindre
Seidler merci Beaucoup. Je vais upvote ce quand j'ai gagné un peu plus de points...Et ce qu'est un grand lien vers sqlfiddle. Superbe.
Pas de problème! Bonne chance! Mon "temps" champ SQL violon est juste une valeur varchar, mais qui ne compte pas 😉
OK, je suis au dessus de 15 points maintenant. +1.
OriginalL'auteur Terry Seidler
Vous avez besoin d'avoir deux tables:
1.Les utilisateurs
USER_ID | NOM
2.Les TWEETS
USER_ID | TEMPS | MESSAGE
Maintenant pour l'explication:
Le tableau 1 représente les utilisateurs, il y a toutes les données sur l'utilisateur, comme le nom, prénom, téléphone, adresse, etc.
Le tableau 2 est pour tous les tweets de tous les utilisateurs, et il y a une colonne qui relie entre l'utilisateur et son tweet.
Dans le tableau 2 USER_ID est clé étrangère, qui pointe à une seule ligne dans la table des utilisateurs.
Pour obtenir tous les tweets d'un utilisateur, vous pouvez écrire la requête suivante:
Mais maintenant, je ne. +1.
En édulcorant la JOINTURE mot-clé, ce qui répond fournit une solution qui est applicable dans sqlite, ainsi, comme signalé par l'OP!
OriginalL'auteur Ofir A.