У меня есть следующая схема:
model Player {
id String @id @default(auto()) @map("_id") @db.ObjectId
steam_id String @unique
name String
level Int @default(1)
elo Float @default(1500)
games Game[] @relation(fields: [game_ids], references: [id])
game_ids String[] @db.ObjectId
clients Client[]
user User? @relation(fields: [user_id], references: [id])
user_id String? @db.ObjectId @unique
created_at DateTime @default(now())
updated_at DateTime @updatedAt
@@map("players")
}
Как видите, user_id — необязательное поле. Однако отношение ТРЕБУЕТ, чтобы оно было помечено как уникальное. При этом я получаю следующую ошибку: дубликат ключа {user_id: null }
Что я могу здесь сделать?

Этот сценарий в настоящее время не поддерживается Prisma.
Существует давнее обсуждение/запрос на добавление функции, который вы можете проверить здесь. Цитата из этого вопроса:
[..] Я думаю, что причина, по которой мы это пока не поддерживаем, заключается в том, что Postgres — единственная поддерживаемая нами база данных, которая ведет себя таким образом, остальные отвергают повторяющиеся значения NULL.
Как бы я мог обойти эту проблему, нужно удалить уникальное ограничение и выполнить проверку кода: если user_id не равно нулю, запросить БД, чтобы узнать, существует ли это значение. Если да, отклоните вставку.
Да, это работает, но я не хочу полагаться на код.
Честно говоря, это ошибка команды Prisma.
Чтобы это исправить, все, что вам нужно сделать, это зайти в индексы вашей коллекции и пометить индекс как «разреженный».
Вы можете сделать это и программно.