0

The main pieces of data I'm having my users enter is an object called an "activity" which consists of a few text fields, a few strings, etc. One of the text fields, called a "Description", could possibly be quite long (such as a long blog post). For each user I would like to store all of their activity objects in a mysql database.

Here are some solutions I've thought of:

  • Have a separate mysql table for each user's activities, i.e. activities_userX, X ranging over

  • Use json to encode these objects into strings and store them as a column in the main table

  • Have one separate table for all these activities objects, and just index them; then for each user in the main table have a list of indices corresponding to which activities are theirs.

What are the pros/cons of these methods? More importantly, what else could I be doing?

Thanks.

1 Answer 1

1

Have a separate mysql table for each user's activities, i.e. activities_userX, X ranging over

A table for every user? That just means an insane number of tables.

Use json to encode these objects into strings and store them as a column in the main table

JSON is a good transport language. You have a database for storing your data, use its features.

Have one separate table for all these activities objects, and just index them; then for each user in the main table have a list of indices corresponding to which activities are theirs.

Getting closer.

This sort of relationship is usually known as 'has many'. In this case "A user has many activities".

You should have a table of users and a table of activities.

One of the columns of the activities table should be a foreign key that points to the primary key of the user table.

Then you will be able to do:

SELECT fields, i, want from activities WHERE userid=?

Or

SELECT users.foo, users.bar, activities.description from users,activities 
    WHERE user.userid=activities.userid
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.