最近我们遇到了以下情况:
我们正在设计一个数据库并预测数据将在6个月内显着增长到数百万条记录。我们希望每行都有一个Guid作为唯一ID,这允许我们稍后将数据移动到OLAP / Archive数据库,在Identity和Guid密钥的许多参数之后,我们想出了Guid作为唯一ID。但是,Guid作为主键总是一个坏主意,因此我们将表的主键设置为Identity列。设计如下所示
用户:
| Id (PK, Identity) |
| UserId (Guid, Unique-constraint, non-clustered index) |
| Name |
| Email |
| ... |
备注:
| Id (PK, Identity) |
| NoteId (Guid, Unique-constraint, non-clustered index) |
| UserId (Guid, Foreign Key to Users(UserId) |
| Title |
| Text |
| ... |
将数据移动到存档时,我们不再需要关心身份密钥了。
这个设计有什么问题吗?表现怎么样?请给我建议,谢谢。
答案 0 :(得分:1)
即使你没有GUID作为主键,你仍然会将它用于连接,为服务器做更多的工作。
您是否有理由不使用Users.Id作为FK目标?
UserId (INT, Foreign Key to Users(Id)
请记住,你也想要对上面的列进行索引,所以你的方式仍然会在表上最终得到两个GUID索引,因为我打赌程序员在应用程序层中制作随机GUID,这可能是碎片化的,你不是在DB中创建NEWSEQUENTIALID()吗?