title: Database design dilemma. Guids or ints?
body: <p>I currently have the following tables  </p>
  
  <pre><code>Nation   
  ----------------  
  Id (int) primary key autoincrement
  Name (char)  
  
  City   
  ----------------  
  Id (int) primary key autoincrement
  NationId (int) references Nation(Id)    
  Name (char)  
  
  Nation table data   
  Id Name  
  ----------  
  0  England  
  1  USA  
  
  City table data   
  Id NationId Name
  -----------------------  
  0  0        London  
  1  0        Manchester  
  2  1        New York  
  3  1        Boston  
  </code></pre>
  
  <p>The above is part of a database that I would want to redistribute to users of my application.<br>
  The users of my application will be allowed to add their own nations and well as cities. When they add their own city, as per the current database design, it would obviously increment the City.Id primary key value.<br>
  However, I would want to at some stage, allow users the ability to 'push' or 'pull' nations/cities from each other's database. For example. User1 has the additional value in his city table:  </p>
  
  <pre><code>Id NationId Name  
  -----------------------  
  4  1        California  
  5  1        Chicago
  </code></pre>
  
  <p>While User2 has the following in his city table:  </p>
  
  <pre><code>Id NationId Name  
  -----------------------  
  4  1        Houston  
  5  1        Phoenix
  </code></pre>
  
  <p>Each wants to have each other's cities in their city table. Once each has pushed their different cities data across, their City.Id, City.Name attributes won't quite correspond.  </p>
  
  <p>User1:</p>
  
  <pre><code>Id NationId Name  
  -----------------------  
  0  0        London  
  1  0        Manchester  
  2  1        New York  
  3  1        Boston  
  4  1        California  
  5  1        Chicago
  6  1        Houston  
  7  1        Phoenix
  </code></pre>
  
  <p>User2:  </p>
  
  <pre><code>Id NationId Name  
  -----------------------
  0  0        London  
  1  0        Manchester  
  2  1        New York  
  3  1        Boston  
  4  1        Houston  
  5  1        Phoenix
  6  1        California  
  7  1        Chicago
  </code></pre>
  
  <p>I would prefer to have the City.Id, City.Name attributes to have a similar look across all the users databases.  </p>
  
  <p>So should I rather user guid's for the City.Id? Or does anyone know of an alternative method I can achieve this desired synchronisation.</p>