C# 针对多种用户类型的最高效的数据库结构

C# 针对多种用户类型的最高效的数据库结构,c#,inheritance,database-design,C#,Inheritance,Database Design,我们正在使用asp.net MVC开发一个系统,在处理多种用户类型方面遇到了数据库设计方面的问题 我们目前正在使用继承结构将主要核心用户划分为特定的用户类型,“学生”和“讲师”用户类型继承自父“用户”类。唯一引用代码中任何用户类型的方法是通过父用户类中的UserID,这使得在引用讲师和添加新用户类型时容易混淆 例如: /// <summary> /// The UserID is a lecturer entry from the Users table. /

我们正在使用asp.net MVC开发一个系统,在处理多种用户类型方面遇到了数据库设计方面的问题

我们目前正在使用继承结构将主要核心用户划分为特定的用户类型,“学生”和“讲师”用户类型继承自父“用户”类。唯一引用代码中任何用户类型的方法是通过父用户类中的UserID,这使得在引用讲师和添加新用户类型时容易混淆

例如:

    /// <summary>
    /// The UserID is a lecturer entry from the Users table.
    /// </summary>
    /// <param name = "UserID">This is the ID of the lecturer.</param>

    [Required(ErrorMessage = "A UserID is Required")]
    **public int  UserID { get; set; }**

    [Required(ErrorMessage = "A LevelID is Required")]
    public int LevelID { get; set; }

    public virtual Pathway Pathway { get; set; }

    **public virtual Lecturer Lecturer { get; set; }**

    public virtual Level Level { get; set; }

    public virtual ICollection<ModuleClass> ModuleClass { get; set; }

    public virtual ICollection<Assignment> Assignment { get; set; }
//
///UserID是用户表中的讲师条目。
/// 
///这是讲师的身份证。
[必需(ErrorMessage=“需要用户ID”)]
**public int UserID{get;set;}**
[必需(ErrorMessage=“需要一个LevelID”)]
公共int-LevelID{get;set;}
公共虚拟路径{get;set;}
**公共虚拟讲师{get;set;}**
公共虚拟级别{get;set;}
公共虚拟ICollection模块类{get;set;}
公共虚拟ICollection赋值{get;set;}

正如您所看到的,“UserID”是一个外键,它引用“讲师”导航属性,理想情况下,我们希望它有一个唯一的名称,例如“讲师ID”。有没有可能的解决办法让我们继续使用继承结构?

也许考虑构图。特别是当讲师很可能同时是另一门课程的学生时。请阅读以下系列教程以获得更好的想法:考虑面向列的DBMS:。这使得继承很容易。因为一个人可以是学生,然后是讲师(事实上我是同一所学校的学生和讲师),这表明继承不是正确的方法。他们是由一个人扮演的角色。使用构图。这个人有很多角色。