mysql 构建房地产SQL模式:显式多对多关系或备选项

6jygbczu  于 12个月前  发布在  Mysql
关注(0)|答案(1)|浏览(117)

我们有一个“Listing”模型的示例,我们希望能够为它分配一个“listing type”,例如,销售/ Rent /(或Both)。如果两者都是,我们如何在列表中同时拥有它们,以通过它们的“列表类型”来查询它们。我们一直在考虑建立一个多对多的关系,并为“ListingType”创建一个模型。这样,“Listing”模型就可以容纳“ListingType”模型的多个示例。
(We尝试做一个隐式的多对多关系,但PlanetScale抱怨,因为他们不支持外键,所以我们正在考虑尝试一个显式的多对多关系,但我们希望得到一些关于替代方案的指导。提前谢谢你。
(We正在使用Prisma和PlanetScale)

model Listing {
  id                Int                    @id @default(autoincrement())
  name              String
  slug              String                 @unique
  bio               String
  price             Int
  userId            Int
  user              User                   @relation(fields: [userId], references: [id])
  status            ListingStatus          @default(ARCHIVED)
  visibility        ListingVisibility      @default(PUBLIC)
  createdAt         DateTime               @default(now())
  updatedAt         DateTime               @updatedAt
  listingTypes      ListingOnListingType[]
}

model ListingType {
  id                   Int                    @id @default(autoincrement())
  name                 ListingTypeEnum        @unique
  ListingOnListingType ListingOnListingType[]
}

model ListingOnListingType {
  listing       Listing     @relation(fields: [listingId], references: [id])
  listingId     Int
  listingType   ListingType @relation(fields: [listingTypeId], references: [id])
  listingTypeId Int
  assignedAt    DateTime    @default(now())
  assignedBy    String

  @@id([listingId, listingTypeId])
}
idfiyjo8

idfiyjo81#

你可以在Prisma和Planetscale中使用隐式的多对多关系。确保您已更新到最新版本的Prisma。
缺点是它必须执行全表查找,因此带有@@索引的显式多对多是理想的

相关问题