我可以看到两个选项,它们都会产生基本相同的结果:
dbo.aspnet_User
与 逻辑上是 1 - 1 dbo.aspnet_Profile
,因此您使用哪种方法并不重要,因为您仍将获得相同的关系完整性。
如果您用自己的实现替换标准配置文件数据表,那么使用第一个建议更有意义,否则如果您要扩展 Profile 架构,则使用第二个建议。
编辑
aspnet_Profile
是标准表 - 标准SqlProfileProvider
将用户的个人资料数据作为序列化的属性包存储在 中aspnet_Profile
,因此也没有单独的aspnet_ProfileData
表。
这种方法允许为不同的应用程序轻松定制配置文件架构,而无需对底层数据库进行任何更改,并且是 .NET 等框架的最佳解决方案。缺点是 SQL Server 根本无法轻松访问这些数据,因此使用 T-SQL 和基于集合的逻辑来索引、更新和查询用户的配置文件数据要困难得多。
我见过的消除此限制的最常见方法是扩展标准SqlProfileProvider
以写入自定义配置文件数据表,该表具有用于特定于应用程序的配置文件属性的特定列。这个表自然和aspnet_Profile表是1-1的关系,所以它有一个如上所示的外键。
扩展提供程序的作用是在配置文件写入期间将特定配置文件属性提升到列,并在检索配置文件时读取列。
这允许您根据需要混合和匹配存储解决方案,只要您的扩展提供者知道如何回退到它不“知道”给定属性的标准实现。
我一直认为最好保留标准成员表,并在必要时使用具有适当外键的新表进行扩展,然后子类化适当的提供者并用您自己的实现覆盖提供者方法(尽可能调用基本实现)。