Whoops, finished my thought too early.  I was going to append, should
we also have UserId, PreferenceId be the PRIMARY KEY?  Then possibly a
secondary index on UserId in case I ever want to get all preferences
for a user?

On Sun, Mar 2, 2008 at 6:18 PM, Waynn Lue <[EMAIL PROTECTED]> wrote:
> But if you're using a varchar for the purposes of getting a list, you
>  might as well store it in a more compact format like int or SET.  The
>  only benefit (which shouldn't be ignored) is that you have a
>  human-readable string to parse, right?
>
>  It seems like most people ended up with a normalized format with
>  UserPreferences, then?  Have people generally found any performance
>  problems with that?  I'd imagine it would be something like
>
>  UserId, PreferenceId, PreferenceSetting
>
>  Where PreferenceSetting might just be another int, that could take all
>  possible settings of that preference.
>
>
>
>  On Fri, Feb 29, 2008 at 8:41 AM, Curtis Maurand <[EMAIL PROTECTED]> wrote:
>  >
>  > I think that I'd set up a varchar column and store a tab separated list in
>  > it.
>  >
>  > Then parse it  upon retrieval.
>  >
>  > Curtis
>  >
>  >
>  >
>  >
>  > Dan Buettner wrote:
>  > > Waynn, I've used both schemes 1 and 2 as you describe, and in my
>  > > experience
>  > > 2 is the best way to go. It's easy to scale up as you add users and
>  > > settings, and it's easy to make changes if the meaning of settings should
>  > > change (i.e. you need to do a backend change to people's settings).
>  > >
>  > > #1 is harder to make those kind of back end updates on, and harder for
>  > > someone troubleshooting to make sense of the data.
>  > >
>  > > #3 may not scale well - you would end up having to track too many tables,
>  > > I
>  > > think.
>  > >
>  > > What I'm doing in my current project is using a data model that has a
>  > > method
>  > > for each preference setting, and returns a sensible value by default if
>  > > the
>  > > user has no pref set for a given lookup key; otherwise, I return what the
>  > > user has set. This means adding a method every time I add a preference
>  > > setting, which on the one hand means adding code - on the other hand,
>  > > chances are very high that if I am adding the ability for a user to set a
>  > > preference, I'm already adding code somewhere to ensure that preference
>  > > has
>  > > an effect.
>  > >
>  > > HTH,
>  > > Dan
>  > >
>  > >
>  > >
>  > > On Thu, Feb 28, 2008 at 9:50 AM, Waynn Lue <[EMAIL PROTECTED]> wrote:
>  > >
>  > >> I'm looking for a good way to store user preferences. The most
>  > >> straightforward way is just to add a column to the Users table for
>  > >> each preference we're looking to store. Downside is that it requires
>  > >> an ALTER TABLE which gets prohibitively expensive as it gets larger,
>  > >> as it's fairly inflexible. I've come up with a few alternatives, and
>  > >> I'm wondering if people have ideas or suggestions, as this has to be a
>  > >> common problem. A quick Google search didn't turn up anything.
>  > >>
>  > >> 1. Store the preferences as a binary blob on the Users table. This
>  > >> blob could be either a blob, or an integer that I use application
>  > >> logic to read/write from, or I could use the SET datatype.
>  > >> 2. Store the preferences in normalized form, with a new table called
>  > >> UserPreferences that has UserId, Setting, Preference and we add a row
>  > >> for each setting of that user.
>  > >> 3. Create a separate table each time we want to add a new setting,
>  > >> UserId, WhateverTheNameOfThePreferenceIs.
>  > >>
>  > >> Anyone have any experience with this, or better suggestions?
>  > >>
>  > >> Thanks,
>  > >> Waynn
>  > >>
>  > >> --
>  > >> MySQL General Mailing List
>  > >> For list archives: http://lists.mysql.com/mysql
>  > >> To unsubscribe:
>  > >> http://lists.mysql.com/[EMAIL PROTECTED]
>  > >>
>  > >>
>  > >
>  > >
>  >
>  >
>  > --
>  > Curtis Maurand
>  > Head Honcho
>  > Xyonet Hosting Services
>  > Biddeford, ME 04005
>  > mailto:[EMAIL PROTECTED]
>  > mailto:[EMAIL PROTECTED]
>

-- 
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to