C# 针对多种用户类型的最高效的数据库结构
我们正在使用asp.net MVC开发一个系统,在处理多种用户类型方面遇到了数据库设计方面的问题 我们目前正在使用继承结构将主要核心用户划分为特定的用户类型,“学生”和“讲师”用户类型继承自父“用户”类。唯一引用代码中任何用户类型的方法是通过父用户类中的UserID,这使得在引用讲师和添加新用户类型时容易混淆 例如:C# 针对多种用户类型的最高效的数据库结构,c#,inheritance,database-design,C#,Inheritance,Database Design,我们正在使用asp.net MVC开发一个系统,在处理多种用户类型方面遇到了数据库设计方面的问题 我们目前正在使用继承结构将主要核心用户划分为特定的用户类型,“学生”和“讲师”用户类型继承自父“用户”类。唯一引用代码中任何用户类型的方法是通过父用户类中的UserID,这使得在引用讲师和添加新用户类型时容易混淆 例如: /// <summary> /// The UserID is a lecturer entry from the Users table. /
/// <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:。这使得继承很容易。因为一个人可以是学生,然后是讲师(事实上我是同一所学校的学生和讲师),这表明继承不是正确的方法。他们是由一个人扮演的角色。使用构图。这个人有很多角色。