собой связываются?
Сейчас я делаю транзакцию await this.prismaService.$transaction( dto.map(({ text, language, translate }) => { return this.prismaService.word.create({ data: { text, language, users: { connect: { id: userId } }, author: { connect: { id: userId } }, themes: { connect: { id: themeId } }, fileName: createMp3FileName(text), translate: { create: { ...translate, fileName: createMp3FileName(translate.text), }, }, }, }); }), );
translate.text он откуда? Как изначально данные связанны?
Сейчас у меня проблема в том что массив из сотки таких записей добавляется в базу около 20 секунд
text - не уникальный?
Уникальный только ID
Может перед записью в бд добавить в каждую пару какой то connect_uid и потом с помощью cte законектить их сопоставляя эти поля?
Я конечно хз почему нет уникальности, кроме id Но это мешает сделать нормальный запрос. Тк можно потерять связь. Проще сделать через for с create по 1 строке. Если их будет до 100 шт. await prisma.$transaction(async (tx) => { for(row of rows) { await tx.word.create(....) } })
тоже можно. Странно, что в переводах тоже нет уникальности.
Текст в словах и переводах был уникальный, но потом это мне всё усложнило и я это убрал
Записей может быть до 2к, это около 2 минут занимает уже
Так перевод должен быть как словарь. И тогда все будет ок. Ты сначала массивом сохраняешь переводы, потом их id крепишь к word или через промежуточную таблицу если есть много вариаций переводов. С другой стороны, почему fileName не уникальный
Там потом возникают трудности когда пользователь начинает редактировать слова или переводы, надо создавать новые, конектить и разконекчивать, проще сделать на каждый раз новую запись и потом делать с ней что угодно, а файлы уникальные
Так, тогда зачем это выносить отдельно? Если связь 1-1 и без пересечений
Транслейт и текст могут тогда быть полями одной таблицы, и связей не надо, точно
Обсуждают сегодня