J'essaie de concevoir une base de données pour un programme qui stocke et manipulant des tweets hors twitter.
J'utilise le code pour fragmenter un tweet en mots, noms d'utilisateur et hashtags, donc
I'm meeting @President over coffee to talk about my new job #cabinet #woot
tomberait dans {meeting, over, coffee, talk, about, new, job}
(se débarrasser des mots sous 2 lettres et après dénudage de ponctuation), {president}
, et {cabinet,woot}
.
Avec mon manque d'expérience dans ce domaine, j'aimerais simplement être capable de développer le nombre de lignes dans une colonne si nécessaire, mais mon intuition me dit que ce serait un cauchemar. Une autre possibilité que j'ai envisagée est juste de choisir un nombre arbitraire comme 10 colonnes pour stocker des mots, 5 pour les noms d'utilisateur, etc., mais cela le ferait un peu, comme je ne le sais pas avec certitude combien il y aura, et Je devrais jeter ce qui peut être des informations précieuses.
Comme il se trouve maintenant, j'ai 3 varchar
s de longueur suffisante qui détiennent "la réunion sur la discussion sur le café sur le nouvel emploi", "Président" et "Cabinet Woot". Donc, chaque fois que je dois saisir les informations pour un tweet particulier, je récupère la rangée et rompt les cordes.
Est-ce la route "correcte"? Est-ce que je manque une manière évidente qui facilitera ma vie? (J'avais trouvé quelque chose en ligne sur l'utilisation de array
, mais j'utilise MySQL et que cela ne semble pas supporter ce type de données.
Edité après quelques commentaires de la question pose!:
Meilleure idée pour votre conception:
(Si vous n'êtes pas familière avec ces diagrammes, c'est sept tables, avec des liens clés étrangers comme illustrés [les trois _Link
Tables ont tous deux clés étrangères faisant référence aux tables de données]. On dirait probablement que je suis surcharge des choses, mais je me fais confiance, "Tokenise une fois et stocker dans la base de données" est SO beaucoup plus efficace que "des données de tokenise chaque fois que vous la récupérez".).
Exemples de données, à l'aide d'un simple tweet (ignorant les utilisateurs pour l'instant, c'est le même concept, cependant): "Test Tweet! #Howdoesthiswork #Newbie"
Tweet
TweetID WordCount
1 2
Tweet_Word_Link
TweetID WordID
1 1
1 2
Word
WordID Word
1 test
2 Tweet
Tweet_Hashtag_Link
TweetID HashtagID
1 1
1 2
Hashtag
HashtagID Hashtag
1 #howdoesthiswork
2 #newbie
Cela vous permet d'obtenir facilement tous les utilisateurs liés dans un tweet:
SELECT U.UserName
FROM User U
INNER JOIN
Tweet_User_Link TUL ON U.UserID = TUL.UserID
INNER JOIN
Tweet T ON TUL.TweetID = T.TweetID
WHERE T.TweetID = <your ID here>
(Modifiez les noms de table selon que nécessaire pour les hashtags et les mots)
Ou légèrement plus compliqué, obtenez les 10 meilleurs mots pour tous les tweets mentionnant un hashtag spécifique:
SELECT TOP 10 W.Word, COUNT(*) AS WordCount
FROM Word W
INNER JOIN
Tweet_Word_Link TWL ON TWL.WordID = W.WordID
INNER JOIN
Tweet T ON TWL.TweetID = T.TweetID
INNER JOIN
Tweet_Hashtag_Link THL ON THL.TweetID = T.TweetID
INNER JOIN
Hashtag H ON H.HashtagID = THL.HashtagID
WHERE H.Hashtag = <your hashtag here>
GROUP By W.Word
(J'ai utilisé une syntaxe ANSI SQL, je ne suis pas sûr à 100% si MySQL prend en charge tout ANSI SQL - mais il devrait être suffisamment proche.)