数据库设计 - 根据用户类型创建配置文件

时间:2015-03-01 16:53:47

标签: mysql database database-design

我需要向不同的用户类型显示不同的字段。

例如,Admin UserType,显示包含10个属性的表单              超级用户类型,显示具有2个属性的表单              普通用户类型,显示具有2个属性的表单

如何设计数据库表,UserType和属性是动态的?

Raja K

1 个答案:

答案 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

这更具动感,但它有一些缺点:

  1. 您无法在数据库中维护数据类型。一切都变成“字符串打字”,应用程序可以正确解释类型。这将导致应用程序中的 ton 防御性编程代码。
  2. 您无法在数据库中维护架构。应用程序需要维护所需属性之类的东西,数据库无法保证。因此,更脏的数据的可能性更高。
  3. 查询和报告此结构更加困难。
  4. 因此,无论采用哪种方式取决于您以及您正在构建的系统的需求,都有利有弊。