Use a join query, rather than separate single-table queries:

SELECT a.*, n.url
FROM articles a, news_sites n
WHERE a.news_site_key = n.news_site_key;

-- Greg Johnson

                -----Original Message-----
                From:   Bennett Haselton [mailto:[EMAIL PROTECTED]]
                Sent:   Tuesday, October 30, 2001 3:11 PM
                To:     [EMAIL PROTECTED]
                Subject:        bad practice to have a primary key field whose value 
changes?

                I'm creating a database where one of the tables stores data about news 
Web 
                sites, and I'm using the URL of the site as a primary key field.  This 
                field value might change occasionally.  I'm wondering if this is bad 
                practice, especially since foreign keys in other tables might point to 
the 
                news site table.  MySQL doesn't enforce referential integrity, so if I 
                change the URL of a particular site, then another table in the 
database 
                might have a reference to a row that no longer exists.

                So I assume the "right" way to do this would be to use an 
auto-incremented 
                number as the primary key field, and then have other tables refer to 
that 
                as their foreign key.  My problem with this is that I like to be able 
to 
                dump the contents of the table and see something meaningful without 
having 
                to refer to other tables.  Say I have an "articles" table in the 
database, 
                and one of the fields is a foreign key referring to the news site in 
the 
                "news sites" table where the article was found.  If I dump the 
contents of 
                the "articles" table, all that I'll see is a number; then I have to go 
look 
                in the "news sites" table to find out which actual site that number 
                corresponds to.  From this point of view, it's a lot easier just to 
use the 
                news site URL as the key field in the "news sites" table -- then 
that's 
                what can be used as the "foreign key" in the articles table.

                What would be ideal would be to use auto-incremented numeric fields as 
                primary key fields, and then have a special field in each table 
designated 
                as the "user-friendly field".  That way, when you want to view the 
contents 
                of a table, the "table viewing" algorithm can take each field marked 
as a 
                foreign key, go to that table, look up the "user-friendly" string for 
that 
                row, and display that instead.  This would satisfy the requirements in 
both 
                paragraphs above.

                Is there already a way to do this, and if not, which of the two 
options 
                above do people usually use?

                        -Bennett

                [EMAIL PROTECTED]     http://www.peacefire.org
                (425) 649 9024


                ---------------------------------------------------------------------
                Before posting, please check:
                   http://www.mysql.com/manual.php   (the manual)
                   http://lists.mysql.com/           (the list archive)

                To request this thread, e-mail <[EMAIL PROTECTED]>
                To unsubscribe, e-mail 
<[EMAIL PROTECTED]>
                Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php

---------------------------------------------------------------------
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/           (the list archive)

To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php

Reply via email to