数据库设计困境。 Guids还是整数?

时间:2011-04-24 16:19:54

标签: database-design primary-key guid data-synchronization

我目前有以下表格

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  

以上是我想要重新分发给我的应用程序用户的数据库的一部分 我的应用程序的用户将被允许添加他们自己的国家和城市。当他们添加他们自己的城市时,根据当前的数据库设计,它显然会增加City.Id主键值 但是,我希望在某个阶段允许用户从彼此的数据库中“推送”或“拉”国家/城市。例如。 User1在其城市表中具有附加值:

Id NationId Name  
-----------------------  
4  1        California  
5  1        Chicago

虽然User2在他的城市表中有以下内容:

Id NationId Name  
-----------------------  
4  1        Houston  
5  1        Phoenix

每个人都希望在他们的城市表中拥有彼此的城市。一旦每个人都推送了不同的城市数据,他们的City.Id,City.Name属性就不会完全一致。

用户1:

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

User2:

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

我更希望City.Id,City.Name属性在所有用户数据库中具有相似的外观。

那么我是否应该为City.Id使用guid?或者有人知道我可以实现这种期望的同步的替代方法。

1 个答案:

答案 0 :(得分:0)

Guids肯定适用于您描述的问题,但是,当两个用户将Boston添加到他们的数据库时会发生什么?你最终会得到大量的重复 - 特别是在普通城市。

您是否可以使用城市信息预先填充数据库?