Re: Remote Key Question

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Apr 23, 2010 at 12:36 PM, David Murphy <david@xxxxxxxxxxxxxxxxx>wrote:

> GRR I hate outlook veruses Trillian
>
>
>
>
> Personally I would make
>
>
>
> Author:
> Id|Name|Bio
>
> Article:
> Id,title,desc,authordata
>
>
> So then I can do things like
>
> Select Articles.Title, article.Description,(select GROUP_CONCAT(Name) from
> authors where authors.ID IN Articles.AuthorData) as Authors from Articles
> where Articles.ID=XXX
>
>
> Then php could $tAuthors=explode(",",$row['Authors']); and pass that into
> smarty or whatever for the view portion of the  app.
>
> I just say this because Junction tables really don't save you much  and
> infact this it's very clear what your doing.
>
> David
>
> -----Original Message-----
> From: Adam Richardson [mailto:simpleshot@xxxxxxxxx]
> Sent: Friday, April 23, 2010 11:09 AM
> To: tedd
> Cc: PHP eMail List
> Subject: Re:  Remote Key Question
>
> On Fri, Apr 23, 2010 at 12:03 PM, tedd <tedd@xxxxxxxxxxxx> wrote:
>
> > Hi gang:
> >
> > A few times I've found myself confronted with a problem that might be
> > better solved than the way I currently solve it. I would like your
> > opinions/solutions as to how you might solve this.
> >
> > Here's the given (as an article/author example).
> >
> > I want to create a list of articles in a database.
> >
> > The articles are listed in a table with the fields "title",
> "description",
> > and "author".
> >
> > article table:
> > id - title - description - author
> >
> > The authors are listed in a table with the fields "name" and bio".
> >
> > author table:
> > id - name - bio
> >
> > Now here's the problem each articles will have one, but perhaps more
> > authors -- so how do I record the authors in the article table?
> >
> > As it is now, I use the remote key for each author and separate each key
> by
> > a comma in the author field of the article table. For example:
> >
> > author table:
> > id - name - bio
> > 1 - tedd - tedd's bio
> > 2 - Rob - Rob's bio
> > 3 - Daniel - Daniel's bio
> >
> > article table:
> > id - title - description - author
> > 1 - PHP Beginner - Beginner Topics - 1
> > 2 - PHP Intermediate - Intermediate Topics - 1,2
> > 3 - PHP Advanced - Advanced Topics - 1,2,3
> >
> > As such, article with id=3 has a title of " PHP Advanced" and a
> description
> > of "Advanced Topics" with tedd, Rob, and Daniel as authors.
> >
> > Is there a better way to link multiple authors to an article rather than
> > placing the remote keys in one field and separating them with commas?
> >
> > Cheers,
> >
> > tedd
> >
> > --
> > -------
> > http://sperling.com  http://ancientstones.com  http://earthstones.com
> >
> > --
> > PHP General Mailing List (http://www.php.net/)
> > To unsubscribe, visit: http://www.php.net/unsub.php
> >
> >
> Well, because each author can have multiple articles and each article can
> have multiple authors, the many-to-many relationship can use a junction
> table:
>
> http://en.wikipedia.org/wiki/Junction_table
>
> In this case articles_authors.
>
> Adam
>
> --
> Nephtali:  PHP web framework that functions beautifully
> http://nephtaliproject.com
>
>
There is a trend towards denormalization (see BigTable, SimpleDB, etc), and
generally, I'm an advocate of the phrase "Normalize until it hurts,
denormalize until it works."

However, part of the question is how does Tedd want to be able to query the
data.  If it's possible that he wants to query from the authors table to the
articles table (e.g., select all of the articles that Richard wrote), a
junction table gets much more useful (and easy relative to the denormalized
approach), especially as the queries increase in complexity.

So, Tedd, I'd carefully evaluate your expected query needs, and if they're
basic, your current scheme would work, but I suspect a junction table would
be better in this particular case.

Happy coding,

Adam

-- 
Nephtali:  PHP web framework that functions beautifully
http://nephtaliproject.com

[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux