Exposed DB : storing a list of supertype

Say i have a superclass called employee and subclasses pf it like guard, teller, etc.

I wired up something like this but i am assuming there is a better way.

my “super class” table

object Employees : IntIdTable() {
    val nameFirst = varchar("nameFirst", 100)
    val nameLast = varchar("nameLast", 100)
    val email = varchar("email", 100)
    val guard = reference("guard_id", id).nullable()
    val teller = reference("teller_id", id).nullable()
    val employeeType =enumerationByName("employee_type", 15, EmployeeType::class)
    val dateCreated = datetime("dateCreated")
    val dateUpdated = datetime("dateUpdated")
}

my “super class” entity

class Employee(id: EntityID<Int>) : IntEntity(id){
    companion object : IntEntityClass<Employee>(Employees)
    var nameFirst by Employees.nameFirst
    var nameLast by Employees.nameLast
    var email by Employees.email
    var employeeType by Employees.employeeType
    var guard by Employees.guard
    var teller by Employees.teller
    var dateCreated by Employees.dateCreated
    var dateUpdated by Employees.dateUpdated
}

my “derived class” table

object Guards : IntIdTable() {
    val fireArmsTrained = bool("fireArmsTrained")
    val employee = reference("employee_id", Employees)
    val dateCreated = datetime("dateCreated")
    val dateUpdated = datetime("dateUpdated")
}

my “derived class” entity

class Guard(id: EntityID<Int>) : IntEntity(id){
    companion object : IntEntityClass<Guard>(Guards)
    var employee by Employee referencedOn Guards.employee
    var fireArmsTrained by Guards.fireArmsTrained
    var dateCreated by Guards.dateCreated
    var dateUpdated by Guards.dateUpdated
}

and my insert looks like this (also need input on a better way to do this)

        val emp = transaction {
            Employee.new {
                nameFirst = "Buddy"
                nameLast = "Legge"
                email = "buddy.legge@gmail.com"
                employeeType = EmployeeType.GUARD
                dateCreated = Date().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()
                dateUpdated = Date().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()
            }
        }

        val guard = transaction {
            Guard.new {
                fireArmsTrained = true
                employee = emp
                dateCreated = Date().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()
                dateUpdated = Date().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()
            }
        }

        transaction {
            emp.guard = guard.id
        }