sql-server - GUID 是否应该用作许多表的外键

标签 sql-server database database-design asp.net-membership

我设计了一个数据库,为 UserID 使用 GUID,但我将 UserId 添加为许多其他表的外键,因为我计划有一个非常大的数字我必须设计好这个数据库输入。

我还使用 ASP 成员表(不只是成员、用户和角色的个人资料)。

所以目前我在每个其他表中都使用 GUID 作为 PK 和 FK,这可能是个糟糕的设计? 我认为可能更好并且是我问题的来源,我是否应该在用户表中添加 UserId(int) 作为主键并将此字段用作其他表和用户的外键 GUID UserId 仅用于引用 aspnet_membership

aspnet_membership{UserID(uniqueIdentifier)}
Users{
UserID_FK(uniqueIdentifier) // FK to aspnet_membership table
UserID(int) // primary key in this table --> Should I add this
...
}
In other tables user can create items in tables and I always must add UserId for example:
TableA{TableA_PK(int)..., CreatedBy(uniqueIdentifier)}
TableB{TableB_PK(int)..., CreatedBy(uniqueIdentifier)}
TableC{TableC_PK(int)..., CreatedBy(uniqueIdentifier)}
...

最佳答案

最终的答案是这真的取决于。

Microsoft 记录了每个 here 的性能差异.虽然这篇文章与您的情况略有不同,因为您必须使用 UNIQUEIDENTIFIER 链接回 asp 成员资格,但许多讨论点仍然适用。

如果您无论如何都必须创建自己的用户表,那么拥有自己的 int 主键并使用 GUID 作为外键会更有意义。它使单独的实体分开。如果将来某个时候您想为用户添加不同的成员资格怎么办?然后您需要更新一个主键,这将必须级联到任何引用它的表,并且可能会严重影响性能。如果它只是您的用户表中的一个唯一列,那么这是一个简单的更新。

关于sql-server - GUID 是否应该用作许多表的外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10616978/

相关文章:

mysql - 在 MySQL 查询中的 SELECT 中使用 SELECT

c# - Microsoft Visual Studio - 无法在 SSIS 包中打开脚本任务

sql-server - 应用默认约束时出错

sql - 将外键绑定(bind)到非主键时有什么缺点吗?

database - 有关设计数据库体系结构的书籍?

SQL Server - PK 删除性能不佳

sql-server - 支持多个客户端的数据库设计

sql - 插入符号 (^) 在 SQL 查询中起什么作用?

sql-server - Entity Framework 中的 View ?

database - 使用 Mediawiki 连接到自定义数据库?