我需要向不同的用户类型显示不同的字段。
例如,Admin UserType,显示包含10个属性的表单 超级用户类型,显示具有2个属性的表单 普通用户类型,显示具有2个属性的表单
如何设计数据库表,UserType和属性是动态的?
Raja K
答案 0 :(得分:0)
我想用户之间有一些共同属性,对吧?你可以通过“超级表”表来解决这个问题。首先使用公共属性创建基表。像这样:
Users
----------
ID (PK)
Username
AccountCreatedDate
etc.
任何用户帐户都会在此表中包含记录。根据它是否使正在进行的操作更简单,您甚至可以在表中包含一个标志,指示用户类型。
然后,您可以为其他用户类型添加其他表,其中PK也是此基表的FK。像这样:
AdminUsers
----------
ID (PK, FK to Users)
etc.
这将包含特定于管理员用户的属性。另一个表将包含特定于超级用户的属性。等等。这里的另一个好处是,单个用户可以拥有多个角色,并根据用例以多种方式进行解释。您可以在数据库中使用一些简单的编译视图,这样可以更轻松地查询表结构。
这适用于静态用户类型集。如果在正常的应用程序使用期间(即,如果应用程序的其中一个操作是人们可以添加用户类型),该集合将经常更改,那么您将不需要严格的模式。 / p>
在这种情况下,您可以将字段视为用户属性的通用表上的元属性。所以你可能会再次拥有你的基表:
Users
----------
ID (PK)
Username
UserType
etc.
然后你可能有一个通用的属性表:
UserProperties
----------
ID (PK)
UserID (FK to Users)
PropertyName
PropertyValue
这更具动感,但它有一些缺点:
因此,无论采用哪种方式取决于您以及您正在构建的系统的需求,都有利有弊。