我正在尝试构建一个系统,其中一个用户可以根据需要插入许多食谱,而一个食谱包含很多成分。然后一种成分有很多宏,这些宏来自一个api调用,我必须将它们一个接一个地插入以获得宏并增加它们的总和。
现在对于我的数据模型,我现在有3个实体。
用户实体:
import { Entity, PrimaryGeneratedColumn, Column, BeforeInsert, OneToMany } from "typeorm";
import { UserRole } from "./user.interface";
import { BlogEntryEntity } from "src/blog/model/blog-entry.entity";
@Entity()
export class UserEntity {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Column({ unique: true })
username: string;
@Column({unique: true})
email: string;
@Column({select: false})
password: string;
@Column({type: 'enum', enum: UserRole, default: UserRole.USER})
role: UserRole;
@Column({nullable: true})
profileImage: string;
@OneToMany(type => BlogEntryEntity, blogEntryEntity => blogEntryEntity.author)
blogEntries: BlogEntryEntity[];
@BeforeInsert()
emailToLowerCase() {
this.email = this.email.toLowerCase();
}
}
一个用户可以插入许多食谱:
import {
Entity,
PrimaryGeneratedColumn,
Column,
BeforeUpdate,
ManyToOne,
} from 'typeorm';
import { UserEntity } from 'src/user/models/user.entity';
@Entity('blog_entry')
export class BlogEntryEntity {
@PrimaryGeneratedColumn()
id: number;
@Column()
title: string;
@Column()
slug: string;
@Column('text', { array: true })
ingr: string[];
@Column({ default: '' })
description: string;
@Column({ default: '' })
body: string;
@Column({ type: 'timestamp', default: () => 'CURRENT_TIMESTAMP' })
createdAt: Date;
@Column({ type: 'timestamp', default: () => 'CURRENT_TIMESTAMP' })
updatedAt: Date;
@BeforeUpdate()
updateTimestamp() {
this.updatedAt = new Date();
}
@Column({ default: 0 })
likes: number;
@Column({ nullable: true })
headerImage: string;
@Column({ nullable: true })
publishedDate: Date;
@Column({ nullable: true })
isPublished: boolean;
@ManyToOne(
type => UserEntity,
user => user.blogEntries,
)
author: UserEntity;
}
并且食谱属于一个用户。 此食谱的ingr值代表食谱可以拥有的成分列表。
我应该为配料创建另一个表格,每种配料都有很多宏吗? 正在考虑这样的事情:
import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';
@Entity()
export class IngredientsEntity {
@PrimaryGeneratedColumn()
id: number;
@Column('text', { array: true })
ingr: string[];
@Column({ default: 0 })
totalWeight: number;
@Column({ default: 0 })
dietLabels: string[];
@Column({ default: 0 })
calorieQuantity: number;
@Column({ default: 0 })
proteinQuantity: number;
@Column({ default: 0 })
carbQuantity: number;
@Column({ default: 0 })
fatQuantity: number;
@Column({ default: 0 })
sugarQuantity: number;
}
每次我插入一个ingr时,我都会增加属于该配方的配料列表的宏。 因此,一个配方具有许多宏,并且许多宏属于一个特定的配方。这种逻辑是正确的还是我应该拆分成分表和宏表?
将逻辑更新为: 更新逻辑以 我的食材更新为:
import { BlogEntryEntity } from 'src/blog/model/blog-entry.entity';
import { Entity, PrimaryGeneratedColumn, Column, ManyToOne } from 'typeorm';
@Entity()
export class IngredientsEntity {
@PrimaryGeneratedColumn()
id: number;
@Column({ default: 0 })
totalWeight: number;
@Column({ default: 0 })
dietLabels: string[];
@Column({ default: 0 })
calorieQuantity: number;
@Column({ default: 0 })
proteinQuantity: number;
@Column({ default: 0 })
carbQuantity: number;
@Column({ default: 0 })
fatQuantity: number;
@Column({ default: 0 })
sugarQuantity: number;
@ManyToOne(
type => BlogEntryEntity,
blog => blog.ingredientsEntry,
)
ingr: BlogEntryEntity;
}
还有我的博客
import {
Entity,
PrimaryGeneratedColumn,
Column,
BeforeUpdate,
ManyToOne,
OneToMany,
} from 'typeorm';
import { UserEntity } from 'src/user/models/user.entity';
import { IngredientsEntity } from 'src/ingredients/models/ingredients.entity';
@Entity('blog_entry')
export class BlogEntryEntity {
@PrimaryGeneratedColumn()
id: number;
@Column()
title: string;
@Column()
slug: string;
@Column('text', { array: true })
ingr: string[];
@Column({ default: '' })
description: string;
@Column({ default: '' })
body: string;
@Column({ type: 'timestamp', default: () => 'CURRENT_TIMESTAMP' })
createdAt: Date;
@Column({ type: 'timestamp', default: () => 'CURRENT_TIMESTAMP' })
updatedAt: Date;
@BeforeUpdate()
updateTimestamp() {
this.updatedAt = new Date();
}
@Column({ default: 0 })
likes: number;
@Column({ nullable: true })
headerImage: string;
@Column({ nullable: true })
publishedDate: Date;
@Column({ nullable: true })
isPublished: boolean;
@ManyToOne(
type => UserEntity,
user => user.blogEntries,
)
author: UserEntity;
@OneToMany(
type => IngredientsEntity,
ingredientsEntity => ingredientsEntity.ingr,
)
ingredientsEntry: IngredientsEntity[];
}
不知道这种逻辑是否可以解决