seems hard to enforce integrity in your model. how are you going to
ensure that the user's city-state-country combo a valid one? (well, you
can, but it is a pain). ask yourself: can a city be in more than one
country? probably not (even if the name is the same it is not the same
city!). can a state be in more than one country? etc., etc. 

seems much cleaner to have cities have a key to states, states to
countries. otherwise might as well just have a big denormalized table
and skip the whole relational thing...

numeric ids vs chars, when properly indexed, should perform about the
same (even if there is a small difference this is not something one
should really worry about; hey, there aren't even that many cities in
the world!)

i would go with a unique internal id (in fact that IS what i do) you can
store the FIPS/ISO code in a neighboring field, but i am not sure it is
good enough for a primary key.
 


> -----Original Message-----
> From: [EMAIL PROTECTED] 
> [mailto:[EMAIL PROTECTED] On Behalf Of Chuck D.
> Sent: Wednesday, May 23, 2007 4:22 PM
> To: pgsql-general@postgresql.org
> Subject: [GENERAL] Geographic data sources, queries and questions
> 
> Greetings all,
> 
> I have a couple issues regarding geographic names databases.
> 
> 1) The first is this.  I have 3 tables.  Country, state and 
> city.  Country has 
> a country_id to identify a country, state has a state_id and 
> country_id to 
> identify a state, and city has a city_id, state_id and 
> country_id (for easy 
> reference) to identify it.  I then have a table for users 
> that stores their 
> city, state and country ID's along with other info about them.
> 
> My problem came recently when I questioned the integrity of 
> the data and 
> needed to make some changes.  I thought to myself that maybe 
> storing the ID 
> wasn't as good as storing the ISO or FIPS 2 letter 
> abbreviation.  The only 
> problem the abbreviation could changed at some point by the 
> regulating bodies  
> and all rows in all tables would need to be updated.
> 
> The question is, for the purposes of querying or searching is 
> it better to 
> store and search a 2 byte integer that is indexed for country 
> or state ID's, 
> or is it better to store and search a 2 byte CHAR abbreviation?
> 
> 2) I've spent an accumulated total of around a month and a 
> half trying to 
> consolidate geographic name data from several free sources on 
> the net and 
> realize this isn't the best use of my time and errors will be 
> had.  Does 
> anyone know of a reliable source of geo data that isn't 
> costly?  Most want to 
> charge a server license, annual rate, etc.  I'm not sure 
> about the free 
> sources because one I used actually had mixed values in a 
> column and drove me 
> nuts.  I primarily need:
> 
> country
> state
> county if applicable
> city
> latitude
> longitude
> 
> This is primarily input from an HTML form to calculate 
> distances between 
> users.
> 
> Anyone who has any experience with geo name data I would 
> appreciate hearing 
> your solution.

---------------------------(end of broadcast)---------------------------
TIP 3: Have you checked our extensive FAQ?

               http://www.postgresql.org/docs/faq

Reply via email to