本文档描述了 188-179 招聘系统的数据模型设计。系统采用 TypeORM 作为 ORM,PostgreSQL 作为数据库。
{
id: number // 主键
username: string // 用户名(唯一)
email: string | null // 邮箱
password: string // 加密密码
roles: Role[] // 用户角色(多对多)
createTime: Date // 创建时间
updateTime: Date // 更新时间
}
{
id: number // 主键
name: string // 角色名称(唯一)
permissions: string[] // 权限列表
users: User[] // 用户列表(多对多)
createTime: Date // 创建时间
updateTime: Date // 更新时间
}
{
id: number // 主键
name: string // 文件名
path: string // MinIO存储路径
size: number // 文件大小(字节)
type: string // 文件类型
uploadUserId: number // 上传用户ID
uploadUser: User // 上传用户(多对一)
uploadTime: Date // 上传时间
lastUpdated: Date // 最后更新时间
}
{
id: number // 主键
orderNo: string // 订单号(唯一)
orderType: string // 订单类型
status: number // 状态:1-正常,0-禁用
amount: number // 订单金额
createTime: Date // 创建时间
updateTime: Date // 更新时间
}
{
id: number // 主键
companyName: string // 公司名称
companyId: string // 企业ID(唯一)
status: number // 状态:1-正常,0-禁用
createTime: Date // 创建时间
updateTime: Date // 更新时间
}
{
id: number // 主键
platformName: string // 平台名称
companyId: number // 所属公司
company: Company // 公司关联(多对一)
status: number // 状态:1-正常,0-禁用
createTime: Date // 创建时间
updateTime: Date // 更新时间
}
{
id: number // 主键
channelName: string // 渠道名称(唯一)
channelType: string // 渠道类型
contactPerson: string // 联系人
contactPhone: string // 联系电话
status: number // 状态:1-正常,0-禁用
createTime: Date // 创建时间
updateTime: Date // 更新时间
}
{
id: number // 主键
name: string // 姓名
idCard: string // 身份证号
disabilityType: string // 残疾类型
disabilityLevel: string // 残疾等级
disabilityCardNo: string // 残疾证号
phone: string // 联系电话
address: string // 地址
avatarFileId: number // 头像文件ID
avatarFile: File // 头像文件(多对一)
status: number // 状态:1-正常,0-禁用
createTime: Date // 创建时间
updateTime: Date // 更新时间
}
| 类型 | 规范 | 示例 |
|---|---|---|
| 表名 | 小写下划线 | user_info, order_detail |
| 字段名 | 小写下划线 | user_name, create_time |
| 主键 | id 或 {table}_id |
id, user_id |
| 外键 | {referenced_table}_id |
user_id, order_id |
| 索引 | idx_{column}_{purpose} |
idx_user_name, idx_order_status |
| 唯一索引 | unique_{column} |
unique_username |
| 数据类型 | PostgreSQL类型 | TypeORM类型 | 用途 |
|---|---|---|---|
| 主键 | int unsigned |
int |
自增主键 |
| 字符串(短) | varchar(n) |
varchar |
用户名、名称等 |
| 字符串(长) | text |
text |
描述、内容等 |
| 金额 | decimal(10,2) |
decimal |
订单金额等 |
| 时间戳 | timestamp |
timestamp |
创建时间、更新时间 |
| 状态 | int |
int |
状态枚举 |
| 布尔 | boolean |
boolean |
开关状态 |
所有表都应包含时间戳字段:
@Column({
name: 'create_time',
type: 'timestamp',
default: () => 'CURRENT_TIMESTAMP',
comment: '创建时间'
})
createTime!: Date;
@Column({
name: 'update_time',
type: 'timestamp',
default: () => 'CURRENT_TIMESTAMP',
onUpdate: 'CURRENT_TIMESTAMP',
comment: '更新时间'
})
updateTime!: Date;
使用 status 字段实现软删除:
@Column({
name: 'status',
type: 'int',
default: 1,
comment: '状态:1-正常,0-禁用'
})
status!: number;
// Company 拥有多个 Platform
@OneToMany(() => Platform, platform => platform.company)
platforms!: Platform[];
// Platform 属于一个 Company
@ManyToOne(() => Company, { eager: false })
@JoinColumn({ name: 'company_id', referencedColumnName: 'id' })
company!: Company;
// User 拥有多个 Role
@ManyToMany(() => Role, role => role.users)
@JoinTable({
name: 'user_roles',
joinColumn: { name: 'user_id', referencedColumnName: 'id' },
inverseJoinColumn: { name: 'role_id', referencedColumnName: 'id' }
})
roles!: Role[];
cd packages/core-module
pnpm typeorm migration:generate -d src/data-source.ts src/migrations/MigrationName
pnpm db:migrate
pnpm db:migrate:revert
文档版本: 1.0 最后更新: 2026-01-07