选择用于存储复杂动态用户配置文件/设置的模型

时间:2011-08-24 01:58:30

标签: asp.net sql-server web-applications asp.net-membership asp.net-profiles

这是布局

  • 我正在使用SQL Server数据库开发内部ASP.NET Web App(在VB.NET中)。
  • 由于我的用户严格是内部用户,因此我使用“Windows”方法进行自动身份验证。
  • 我有四个用户角色,每个角色都有自己独特且动态的设置。
  • BONUS:每个用户可能有多个角色,因此可能有多个个人资料。

根据我的广泛研究,我确定了以下两种方法来存储用户配置文件设置(两者都提示问题“如何?”),虽然我不确定哪个是最好的(如果有的话):

  • 在数据库中存储配置文件和相关设置(使用什么结构?从初步映射,我创建了至少四个表,这些表开始变得非常难以管理且无法维护)
  • 使用内置的ASP.NET Membership&个人资料对象? (我似乎无法找到一个很好的教程。这个方法是否仍需要DB支持?再次,使用什么表结构?) - 我对这个可能的解决方案最感兴趣

示例:

我最复杂的用户组需要能够存储与用户关联的所有(用户选择的)产品的配置文件。说我是产品经理,我希望我的帐户能够向我展示我选择负责的所有产品。显然,我角色的每个成员都会有不同的产品和不同数量的产品等。或许用户页面设置(例如搜索,分类,订单默认等)可以存储在通用表中,一个奇怪的东西的辅助设置表的引用,可以通过一个特殊的记录链接到一个特殊的记录,可以作为各种“外键”。

正如我所要求的, 一个我对表计划的想法:

    Users (ID, Username, RoleID)
    Roles (ID, RoleName, Description) --Lookup Table
    Settings (ID, Name, Value)
    UserSettings (ID, UserID, SettingID) --Junction Table

然后出现问题:

  1. 我应该何时使用行与列?
  2. 如果我在每个设置中使用一列,我可以定义数据类型,但列数可能会失控。另一方面,如果我每个设置使用一行它会更好,但我失去了对设置的数据类型的控制。
  3. 我应该省略UserSettings表,只是为SettingsID外键中的每个设置附加一个name = value对记录吗?
  4. 等等...
  5. 我的理想答案:

    正如你所看到的,我有很多问题并且找不到任何帮助。如果有人可以用简单的术语为我分解,我会喜欢。请告诉我您的专业建议和一些关于如何实现它的超级简单提示(即使用哪些ASP.NET 对象,以及所述对象如何提供机制管理我的复杂配置文件)

1 个答案:

答案 0 :(得分:1)

我认为这几乎肯定需要在数据库中建模。

与用户相关联的产品实际上并不是基于角色的东西 - 因此即使您只说经理会有这种关系,也必须在很大程度上独立于角色。只有角色中的用户才会拥有该链接,但这可能是您在应用程序级别强制执行的高级别限制或某种更高级别的约束 - 而不是外键 - 除非您拥有依赖于用户和角色的链接。

然后,充当经理的用户可能拥有某些产品,但充当推销员,不同的产品。然后角色也会在链接表中。有时链接表行确实有关于链接的属性,而不仅仅是链接本身(通常是有效日期和活动/禁用标志之类的东西)。