最近,我们遇到了以下情况:
我们正在设计一个数据库,并预测数据将在6个月内大幅度增长到数百万记录。我们希望每一行都有一个Guid作为唯一的ID,这使我们以后可以将数据移动到OLAP/Archive数据库中,在多次关于标识和Guid键的参数之后,我们提出了Guid作为唯一的ID。然而,Guid作为一个主键总是一个坏主意,因此表的主键是一个标识列。设计如下
用户
| Id (PK, Identity) |
| UserId (Guid, Unique-constraint, non-clustered index) |
| Name |
| Email |
| ... |Notes
| Id (PK, Identity) |
| NoteId (Guid, Unique-constraint, non-clustered index) |
| UserId (Guid, Foreign Key to Users(UserId) |
| Title |
| Text |
| ... |当将数据移动到存档时,我们不再需要关心标识密钥了。
这个设计有什么问题吗?表演怎么样?请给我建议,谢谢。
发布于 2013-05-21 08:50:55
即使您没有将GUID作为主键,您仍然会将它用于连接,从而为服务器带来更多的工作。
你为什么不使用Users.Id作为FK的目标呢?
UserId (INT, Foreign Key to Users(Id)请记住,您还需要对上面的列进行索引,所以您的方式仍然是表上的两个GUID索引,很可能是零碎的,因为我打赌程序员在应用程序层中随机生成GUID,而不是在DB中生成NEWSEQUENTIALID()?
https://stackoverflow.com/questions/16665536
复制相似问题