|
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
|
||||||||||||||||||||||||||||||||||||
MySQL Как сделать оптимальный код для вставки строк (INSERT and FOREIGN KEY) (linq2db)17.02.2021, 15:55. Показов 8535. Ответов 27
Доброго всем!
Когда мелкое приложение, которое использует БД с парой таблиц, вопросов не возникает. А когда приложение по крупнее, нужна правильно спроектированная БД. Вот с самой проектировкой БД более-меннее понятно. Но вопросов много возникает при вставке новых значений в таблицы с внешними ключами (FOREIGN KEY). Все видеокурсы о SQL на 90+% состоят из уроков на SELECT. В этих курсах или данные уже существуют, до начала урока, и делаются выборки, или добавляются данные с уже известными внешними ключами. Но как оптимально поступать в реальных приложениях? Это всё естественно примитивная модель БД, чтобы лучше объяснить что я хочу. Мне нужно не создать структуру БД, а понять "правильный"|"оптимальный"|"лёгкий"|"над ёжный" способ работы с БД из .Net + linq2db и FOREIGN KEY. Представьте вот такую ситуацию. Есть некий сервис онлайн курсов "Online". К нему есть ограниченный доступ по API (по 1 разу в 60 минут к Student и Course). Tеоретически я хочу получать актуальную информацию с сервиса и добавлять её в свою БД, чтобы все желающие могли использовать эту информацию без ограничений. Чтобы не было многабукаф, спрячу код под спойлеры. Сущности получаемые по API
Из двух API объектов Student и Course получается три таблицы в БД, так как один студент может быть записан на несколько курсов. `StudentCourse` таблица многие ко многим. У одного студента может быть много курсов. У одного курса можеть быть много студентов. SQL создания таблиц
Соответственно для этих таблиц БД созданы классы-сущности в C# Сущности C# для linq2db
А теперь последовтельность действий. Я могу сделать запрос и получить список пользователей (Online.API.Student -- get.Student?) И получить объекты класса Online.API.Student. К примеру получаю вот такого пользователя.
Затем я конвертирую его в Online.Model.Student и добавляю в таблицу БД `Student`
И вот теперь мне нужно добавить данные в таблицу `StudentCourse`. Но есть несколько вопросов. Я не могу добавить с обновлением потому, что в таблице стоит PrimaryKey на оба поля. А так же я не знаю существует ли Course.Id в таблице `Course`. То есть мне нужно проверить существование Course.Id, затем отсутствие этой пары в `StudentCourse`. С этого места мне кажетя всё идёт не очень гладко. Может и до этого места тоже было не очень, но сейчас и я это вижу. Реализация вставки. С предварительной проверкой вставляем строки
И только теперь добавляем в таблицу, предварительно проверив на существование.
Вопрос вот собственно в чём. При каждом обновлении Student, мне нужно совершать кучу этих запросов. Как вообще опытные разработчики с этим поступают? Я думаю должен быть способ это сделать проще. Допустим сам ORM linq2db может что-то уже умеет делать это проще? P.S. Сразу получить все курсы с API я не могу. (Online.API.Course) Могу получать только пользоватлелей, и уже потом по CourseIds получать описание и всё остальное по самому курсу. Буду благодарен за любую помощь. Конструктивная критика, с указанием на ошибки, и способы их решений крайне приветствуется.
0
|
||||||||||||||||||||||||||||||||||||
| 17.02.2021, 15:55 | |
|
Ответы с готовыми решениями:
27
Как сделать Insert в таблицу, которая содержит foreign key другой таблицы SQLite - оптимальный размер транзакции, стоит ли использовать FOREIGN KEY, связь PRIMARY KEY и INDEX Insert запрос к sqlite с foreign key |
|
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
|
||||||
| 19.02.2021, 15:22 [ТС] | ||||||
|
А откуда тогда эти выводы? Это онлайн курсы, я об этом указал Вы вообще читали условия?
0
|
||||||
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|
| 19.02.2021, 15:33 | |
|
BeginnerCoderCS, Не в коня корм оказался. Позвольте откланяться
0
|
|
|
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
|
||
| 19.02.2021, 16:01 | ||
|
0
|
||
|
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
|
||||
| 19.02.2021, 17:30 [ТС] | ||||
![]() А вообще я интересовался не структурой БД, а "оптимальной" работой с FOREIGN KEY. На текущий момент меня устраивает вот этот ответ. Если кому есть что добавить, то тема открыта 24/7
0
|
||||
|
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
|
|
| 19.02.2021, 17:48 | |
|
BeginnerCoderCS, перечитал еще раз ваш первый пост...ну что сказать, ответ на него был во 2-м посте)
https://www.cyberforum.ru/ado-... st15268876
0
|
|
|
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
|
|
| 20.02.2021, 20:38 [ТС] | |
|
0
|
|
|
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
|
|||||||
| 06.03.2021, 00:50 [ТС] | |||||||
|
Скажите пожалуйста, в таком коде (Repostirory) нужно ли запрос обернуть в try catch?
0
|
|||||||
|
14368 / 9469 / 1360
Регистрация: 21.01.2016
Сообщений: 35,733
|
||
| 06.03.2021, 07:55 | ||
|
1
|
||
| 06.03.2021, 07:55 | |
|
The INSERT statement conflicted with the FOREIGN KEY Конфликт инструкции INSERT с ограничением Foreign Key
Конфликт инструкции INSERT с ограничением FOREIGN KEY Конфликт инструкции INSERT с ограничением FOREIGN KEY Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Установка нескольких штампов электронной подписи в строго определенных местах файла docx
ВладимирСамохин 19.07.2026
(В!) Работа с Электронной подписью - это неотъемлемая часть современного документооборота. Но что делать, если нужно поставить несколько штампов электронной подписи в строго определенных местах. . .
|
сукцессия 35. Научная статья о проделанной работе
anaschu 19.07.2026
Написал в формате латекс и пдф
|
Вангую, что это не пройдёт модерацию, и на неделе я запущу свой сервер.
Hrethgir 19.07.2026
Эта публикация сейчас в песочнице и ждёт приглашения.
https:/ / habr. com/ ru/ sandbox/ 295048/
начало и оглавление
-
Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование. . .
|
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
|
|
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано
Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
|
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано
Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
|
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0)
Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона
Уважаемые коллеги!
В продолжение. . .
|
Грибы - это женщины, деревья - это мужчины. Анти инь янь для союза мужчины и женщины.
anaschu 18.07.2026
ГЛАВНЫЙ НАУЧНО-ФИЛОСОФСКИЙ ВЫВОД: Сексуально-Репродуктивный Капитализм против Государства Моногамии
Коллеги, мы вышли на финишную прямую 20-мерного ОДУ-моделирования вековой сукцессии (ветка. . .
|