Search Postgresql Archives

Re: IS it a good practice to use SERIAL as Primary Key?

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

 




On Nov 28, 2006, at 9:55 , Joshua D. Drake wrote:

On Tue, 2006-11-28 at 09:29 +0900, Michael Glaesemann wrote:
On Nov 28, 2006, at 9:02 , Joshua D. Drake wrote:

On Mon, 2006-11-27 at 17:31 -0600, John McCawley wrote:
I promise I'm not trying to be a pain in the butt ;) Do you then use
your serial id as your foreign key in other tables, or the
firstname/lastname primary key?

Now that is a good question. I would use the id, but that is not
technically proper :).

If you have both a surrogate key (the serial column) as well as a
natural key (e.g., the (first_name, last_name) composite key), what
difference does it make? You can get to the first_name, last_name
data via a join on the surrogate key.

The point is easy data management...

SELECT * FROM names;
UPDATE names set first_name = 'foo' WHERE id = 6
vs
SELECT * FROM names;
UPDATE names set first_name = 'foo' WHERE first_name = 'Joshua' AND
last_name = 'Drake';

Or did I misunderstand your question?

question was more rhetorical than anything else. In the case of having both a surrogate key and a natural key, you have the advantage of both. You can perform the update just as you describe on the names table. Where I see an advantage of natural keys is when you're updating a table that references "names". Then, all you've got is an integer if you're using the surrogate key. UPDATE ... FROM and DELETE ... USING are very helpful in this situation. Though I'd rather build an app to perform such updates than enter them via direct SQL.

Michael Glaesemann
grzm seespotcode net




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux