как проектировать сущности в typeorm, если есть центральная таблица пользователей и разные таблицы ролей - PullRequest
0 голосов
/ 29 ноября 2018

предположим, что я проектирую школьный веб-сайт, и есть много ролей, таких как ученики, учителя, администраторы ...

мой дизайн БД выглядит следующим образом

enter image description here

затем, подумайте, легко ли читать и как легко спроектировать, как лучше проектировать объекты в typeorm?

[ОБНОВЛЕНО] наконец, я проектирую так, я просто объединяю всю роль втаблица ROLE, а role_type означает другую роль, например.5 означает «администратор», 3 означает «учитель», 2 означает «ученик».

, однако существует 2 избыточности столбцов: school_id и class_id.эти 2 столбца не требуются для администрирования, потому что администратор не принадлежит ни к одной школе или классу, но если я попытаюсь поместить эти 2 столбца в другие места для записи, это кажется еще одним бесполезным и сложным процессом. enter image description here

1 Ответ

0 голосов
/ 29 ноября 2018

Я бы соблазнился:

  1. Сделать все сущности таблиц
  2. Имейте отношения @OneToOne между вашими таблицами ролей и 'user'

Таким образом, ваши запросы к таблицам ролей могут получить отношение «пользователь», генерирующее разумное представление 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
}
...