商品とキーワードを分ける
8396 ワード
키워드
は、関連商品を検索するために使用される.(キーワードはスペースで区切られて入力されます.)🤔 既存と現在の比較
従来の方法は、
product
テーブルにキーワードを直接入れることです.その後、クエリー自動完了機能を作成しようとしたときによく考えてみると、キーワードが重複しているときのデータが重複しているという問題が発見され、インポート時にもより便利で、より容易に区別したいので、
N : M
の関係でキーテーブルを分けて生成したほうがいいと思います.기존 스키마 정의 ( prisma )
model Product {
id Int @id @default(autoincrement())
name String @db.VarChar(30)
price Int
description String @db.MediumText
image String?
keywords String @db.VarChar(40)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
records Record[]
answers Answer[]
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
userId Int
@@index([userId])
}
현재 스키마 정의 ( prisma )
model Product {
id Int @id @default(autoincrement())
name String @db.VarChar(30)
price Int
description String @db.MediumText
image String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
records Record[]
answers Answer[]
keywords Keyword[]
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
userId Int
@@index([userId])
}
model Keyword {
id Int @id @default(autoincrement())
keyword String @unique @db.VarChar(20)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
products Product[]
}
😀 使用コードの例の変更
// async 함수 내부에 있다고 가정
const createdProduct = await prisma.product.create({
data: {
name,
price: +price,
description,
image: photo ? photo : null,
keywords,
user: {
connect: {
id: user?.id,
},
},
},
});
// async 함수 내부에 있다고 가정
const createdProduct = await prisma.product.create({
data: {
name,
price: +price,
description,
image: photo ? photo : null,
user: {
connect: {
id: user?.id,
},
},
},
});
// 키워드 생성 or 찾고 상품과 연결
const keywordsPromise = (keywords as string).split(" ").map((keyword) =>
prisma.keyword.upsert({
create: {
keyword,
products: {
connect: {
id: createdProduct.id,
},
},
},
update: {
products: {
connect: {
id: createdProduct.id,
},
},
},
where: {
keyword,
},
})
);
await Promise.all(keywordsPromise);
🔎 の最後の部分
残りの導入商品、導入関連商品などのコードも修正されています.
Reference
この問題について(商品とキーワードを分ける), 我々は、より多くの情報をここで見つけました https://velog.io/@1-blue/상품과-키워드-테이블-분리テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol