Compareware_next.js/prisma/schema.prisma

98 lines
3 KiB
Text
Raw Normal View History

// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema
generator client {
provider = "prisma-client-js"
output = "../src/generated/prisma"
}
datasource db {
provider = "sqlite"
url = "file:./dev.db"
}
// URLs table - Each comparison page has its own URL
model Url {
id Int @id @default(autoincrement())
url String @unique
createdAt DateTime @default(now()) @map("created_at")
// Relations
items Item[]
selectedProperties SelectedProperty[]
deletedProperties DeletedProperty[]
@@map("urls")
}
// Properties table - All available properties (core + custom)
model Property {
id Int @id @default(autoincrement())
name String @unique
globalUsageCount Int @default(0) @map("global_usage_count")
// Relations
itemProperties ItemProperty[]
selectedProperties SelectedProperty[]
deletedProperties DeletedProperty[]
@@map("properties")
}
// Items table - Individual items that can appear in multiple URLs
model Item {
id String @id
urlId Int @map("url_id")
wikidataId String? @map("wikidata_id")
itemOrder Int @default(0) @map("item_order")
globalItemId String @unique @map("global_item_id")
// Relations
url Url @relation(fields: [urlId], references: [id], onDelete: Cascade)
itemProperties ItemProperty[] @relation("ItemToItemProperty")
deletedProperties DeletedProperty[]
@@map("items")
}
// Junction table for item properties (including core properties like name, description)
model ItemProperty {
globalItemId String @map("global_item_id")
propertyId Int @map("property_id")
value String
// Relations
item Item @relation("ItemToItemProperty", fields: [globalItemId], references: [globalItemId], onDelete: Cascade)
property Property @relation(fields: [propertyId], references: [id], onDelete: Cascade)
@@id([globalItemId, propertyId])
@@map("item_properties")
}
// Selected properties for each URL (excludes core properties)
model SelectedProperty {
urlId Int @map("url_id")
propertyId Int @map("property_id")
// Relations
url Url @relation(fields: [urlId], references: [id], onDelete: Cascade)
property Property @relation(fields: [propertyId], references: [id], onDelete: Cascade)
@@id([urlId, propertyId])
@@map("selected_properties")
}
// Soft delete tracking for properties per URL
model DeletedProperty {
urlId Int @map("url_id")
globalItemId String @map("global_item_id")
propertyId Int @map("property_id")
// Relations
url Url @relation(fields: [urlId], references: [id], onDelete: Cascade)
item Item @relation(fields: [globalItemId], references: [globalItemId], onDelete: Cascade)
property Property @relation(fields: [propertyId], references: [id], onDelete: Cascade)
@@id([urlId, globalItemId, propertyId])
@@map("deleted_properties")
}