111*_*110 5 database sql-server database-design asp.net-membership
我设计了一个数据库来使用GUID作为数据库,UserID但是我将它UserId作为外键添加到许多其他表中,并且由于我打算有大量的数据库输入,因此必须对此进行精心设计。
我还使用ASP成员资格表(不仅概要分析成员资格,用户和角色)。
因此,目前我在每张其他表中都使用GUID作为PK和FK,这可能是错误的设计吗?我认为这可能更好,并且是我问题的出处,是否应该在Users表中添加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)}
...
Run Code Online (Sandbox Code Playgroud)
最终的答案是,这确实取决于情况。
Microsoft 已在此处记录了每种方法的性能差异。虽然本文与您的情况略有不同,因为您必须使用 UNIQUEIDENTIFIER 链接回 asp 成员资格,但许多讨论点仍然适用。
如果您必须创建自己的用户表,那么拥有自己的 int 主键并使用 GUID 作为外键会更有意义。它将不同的实体分开。如果将来某个时候您想向用户添加不同的成员身份怎么办?然后,您需要更新主键,这必须级联到引用该主键的任何表,并且可能会严重影响性能。如果它只是用户表中的唯一列,则这是一个简单的更新。
| 归档时间: |
|
| 查看次数: |
7994 次 |
| 最近记录: |