Database design 如果有一个中心用户表和不同的角色表,如何在TypeForm中设计实体

Database design 如果有一个中心用户表和不同的角色表,如何在TypeForm中设计实体,database-design,entity,nestjs,typeorm,Database Design,Entity,Nestjs,Typeorm,假设我正在设计一个学校网站,有很多角色,比如学生、老师、管理员 我的数据库设计是这样的 那么,考虑到易于阅读和易于保存,如何在Type中设计实体更好? [更新] 最后,我这样设计,我只是将所有角色合并到一个角色表中,角色类型表示不同的角色,例如5表示管理员,3表示教师,2表示学生 但是,有两列冗余,学校id和班级id。 这两个栏目对管理员来说是不必要的,因为管理员不属于任何一个学校或班级,但如果我试图将这两个栏目放在其他表格中记录,那似乎是另一种浪费和更复杂 我很想: 使所有表成为实体 在您的

假设我正在设计一个学校网站,有很多角色,比如学生、老师、管理员

我的数据库设计是这样的

那么,考虑到易于阅读和易于保存,如何在Type中设计实体更好?

[更新] 最后,我这样设计,我只是将所有角色合并到一个角色表中,角色类型表示不同的角色,例如5表示管理员,3表示教师,2表示学生

但是,有两列冗余,学校id和班级id。 这两个栏目对管理员来说是不必要的,因为管理员不属于任何一个学校或班级,但如果我试图将这两个栏目放在其他表格中记录,那似乎是另一种浪费和更复杂 我很想:

  • 使所有表成为实体
  • 在您的角色表和“用户”之间具有@OneToOne关系
  • 这样,您对角色表的查询就可以检索“用户”关系,从而生成合理的JSON表示:

    { 
      user_id: 11,
      phone: '555-444-3333',
      school_id: '1234567',
      user: {
        id: 11',
        nickname: 'Jack',
        username: 'jblack',
        ...
      }
    }
    
    示例实体

    @Entity()
    export class User {
      @PrimaryGeneratedColumn()
      id: number;
    
      @OneToMany(type => Role, role => role.user)
      roles: Role[];
    
      @OneToMany(type => Student, student => student.user)
      students: Student[];
    
      //TODO add the rest
    }
    
    
    @Entity()
    export class Role {
      @PrimaryGeneratedColumn()
      id: number;
    
      @ManyToOne(type => User, user => user.role)
      roles: Role[];
    
      //TODO add the rest
    }
    
    我很想:

  • 使所有表成为实体
  • 在您的角色表和“用户”之间具有@OneToOne关系
  • 这样,您对角色表的查询就可以检索“用户”关系,从而生成合理的JSON表示:

    { 
      user_id: 11,
      phone: '555-444-3333',
      school_id: '1234567',
      user: {
        id: 11',
        nickname: 'Jack',
        username: 'jblack',
        ...
      }
    }
    
    示例实体

    @Entity()
    export class User {
      @PrimaryGeneratedColumn()
      id: number;
    
      @OneToMany(type => Role, role => role.user)
      roles: Role[];
    
      @OneToMany(type => Student, student => student.user)
      students: Student[];
    
      //TODO add the rest
    }
    
    
    @Entity()
    export class Role {
      @PrimaryGeneratedColumn()
      id: number;
    
      @ManyToOne(type => User, user => user.role)
      roles: Role[];
    
      //TODO add the rest
    }
    

    谢谢,我更新了我的设计,但看起来仍然不完美谢谢,我更新了我的设计,但看起来仍然不完美