From: | Michael Glaesemann <grzm(at)seespotcode(dot)net> |
---|---|
To: | Nabil <Nabil(at)kramer-smilko(dot)com> |
Cc: | pgsql-novice(at)postgresql(dot)org |
Subject: | Re: Mapping one to many |
Date: | 2007-06-13 15:49:44 |
Message-ID: | 1F26632A-E0B7-4784-96F1-3F29EF512E41@seespotcode.net |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-novice |
On Jun 13, 2007, at 10:05 , Nabil wrote:
> Ok this is a very simple problem but for some reason I'm suffering
> from brain freeze. I have two tables Users and Groups. A user can
> be a member of many different groups.
> What I was thinking of doing is creating a column called groups in
> users of type int[] that contains the ids of the groups the user is
> a member of. I want to make sure the group exists. The problem is I
> cant have Users.groups reference Groups.id.
Only use arrays for data types that are naturally arrays, i.e.,
you're treating the array as a value rather than accessing individual
elements of the array. As you've seen, relational databases are not
at their best when operating on array elements: relational databases
operate on tables, columns, and rows.
> Is there some kind of check I can do?
Not easily.
> If so what would happen if I delete a group that has members in it?
Good question :)
> One other way I though about was having a user_group_mapping table
> so that would have something like user_id that references Users.id
> and group_id that references Groups.id and when I want to figure
> out what groups a user is a member of I would do "SELECT group_id
> FROM user_group_mapping WHERE user_id=(the id I need)" but that
> seems kind of messy.
That's exactly how you *should* do it. It's a lot less messy than
what you'll go through trying to do it using arrays. :)
Michael Glaesemann
grzm seespotcode net
From | Date | Subject | |
---|---|---|---|
Next Message | Nabil | 2007-06-13 16:17:19 | Re: Mapping one to many |
Previous Message | Nabil | 2007-06-13 15:05:25 | Mapping one to many |