52 lines
1.6 KiB
Plaintext
52 lines
1.6 KiB
Plaintext
// This is your Prisma schema file,
|
|
// learn more about it in the docs: https://pris.ly/d/prisma-schema
|
|
|
|
// Looking for ways to speed up your queries, or scale easily with your serverless or edge functions?
|
|
// Try Prisma Accelerate: https://pris.ly/cli/accelerate-init
|
|
|
|
generator client {
|
|
provider = "prisma-client-js"
|
|
}
|
|
|
|
datasource db {
|
|
provider = "postgresql"
|
|
url = env("DATABASE_URL")
|
|
}
|
|
|
|
model Person {
|
|
id String @id @default(uuid())
|
|
name String
|
|
company String?
|
|
role String?
|
|
email String?
|
|
location String?
|
|
sectors String[] @default([])
|
|
interests String[] @default([])
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
|
|
// Relations (undirected connections modeled as two directed FKs)
|
|
connectionsA Connection[] @relation("ConnectionsA")
|
|
connectionsB Connection[] @relation("ConnectionsB")
|
|
|
|
@@index([name])
|
|
}
|
|
|
|
model Connection {
|
|
id String @id @default(uuid())
|
|
personAId String
|
|
personBId String
|
|
personA Person @relation("ConnectionsA", fields: [personAId], references: [id], onDelete: Cascade)
|
|
personB Person @relation("ConnectionsB", fields: [personBId], references: [id], onDelete: Cascade)
|
|
introducedByChain String[] @default([])
|
|
eventLabels String[] @default([])
|
|
notes String?
|
|
createdAt DateTime @default(now())
|
|
|
|
@@index([personAId])
|
|
@@index([personBId])
|
|
// Uniqueness of undirected pair (A,B) and self-edge prevention enforced via SQL migration with
|
|
// a functional unique index on (LEAST(personAId, personBId), GREATEST(personAId, personBId))
|
|
// and a CHECK (personAId <> personBId).
|
|
}
|