Базы данных (Data Base). По всем вопросам @evgenycarter
🖥 DrawDB
Бесплатный, простой и интуитивно понятный инструмент для проектирования баз данных и генератор SQL.
https://github.com/drawdb-io/drawdb
#db
👉 @database_info
На грани ИИ: пример поиска и обработки векторов в PostgreSQL + pgvector
На Хабре было много упоминаний pgvector в обзорах Postgresso. И каждый раз новость была про место которое где‑то за границей и далеко. Многие коммерческие решения для хранения и поиска векторов в базе данных нынче не доступны, а pgvector доступен любому, тем более в самой популярной базе в России. Применим pgvector для задачи поиска похожих домов по инфраструктуре для детей в Москве.
В этой статье покажу на этом практическом примере как хранить, кластеризовать алгоритмом DBSCANвекторы и искать по ним в базе данных. В примере задача с векторами на грани типичного хранения и обработки результатов работы нейросетевых моделей в базе данных.
https://habr.com/ru/articles/777734/
#db
👉 @database_info
Какие типы СУБД в соответствии с моделями данных вы знаете?
Этот вопрос по SQL предполагает не просто назвать, но и дать краткое описание каждому типу.
Существует несколько типов СУБД:
Реляционные, которые поддерживают установку связей между таблицами с помощью первичных и внешних ключей. Пример — MySQL.
Flat File — базы данных с двумерными файлами, в которых содержатся записи одного типа и отсутствует связь с другими файлами, как в реляционных. Пример — Excel.
Иерархические подразумевают наличие записей, связанных друг с другом по принципу отношений один-к-одному или один-ко-многим. А вот для отношений многие-ко-многим следует использовать реляционную модель. Пример — Adabas.
Сетевые похожи на иерархические, но в этом случае «ребёнок» может иметь несколько «родителей» и наоборот. Примеры — IDS и IDMS.
Объектно-ориентированные СУБД работают с базами данных, которые состоят из объектов, используемых в ООП. Объекты группируются в классы и называются экземплярами, а классы в свою очередь взаимодействуют через методы. Пример — Versant.
Объектно-реляционные обладают преимуществами реляционной и объектно-ориентированной моделей. Пример — IBM Db2.
Многомерная модель является разновидностью реляционной и использует многомерные структуры. Часто представляется в виде кубов данных. Пример — Oracle Essbase.
Гибридные состоят из двух и более типов баз данных. Используются в том случае, если одного типа недостаточно для обработки всех запросов. Пример — Altibase HDВ.
#db
👉 @database_info
✅ Изучаем конфигурации PostgreSQL на открытом практическом уроке от OTUS
🔹На вебинаре рассмотрим оптимальные способы конфигурирования PostgreSQL, а также научимся тестировать наши конфигурации при помощи sysbanch, pgbench и бонус.
Вебинар будет полезен разработчикам SQL, архитекторам и DBA.
👉 Регистрация
https://clck.ru/3AM8PP?erid=LjN8K7kCA
NULL-значения в PostgreSQL: правила и исключения
Навскидку многим кажется, что они знакомы с поведением NULL-значений в PostgreSQL, однако иногда неопределённые значения преподносят сюрпризы. Мы с коллегами написали статью на основе моего доклада с PGConf.Russia 2022 — он был полностью посвящён особенностям обработки NULL-значений в Postgres.
https://habr.com/ru/companies/postgrespro/articles/697300/
#db
👉 @database_info
Learning Snowflake SQL and Scripting: Generate, Retrieve, and Automate Snowflake Data
Автор: Alan Beaulieu (2023)
Чтобы помочь вам стать профессионалом в области Snowflake, в этом кратком, но исчерпывающем руководстве рассматриваются основы и лучшие практики использования языков SQL и Scripting в Snowflake. Разработчики и специалисты по работе с данными узнают, как генерировать, модифицировать и запрашивать данные в реляционной системе управления базами данных Snowflake, а также как применять аналитические функции для создания отчетов. Автор также покажет, как создавать сценарии, хранимые функции и хранимые процедуры для возврата наборов данных с помощью Snowflake Scripting. Эта книга идеально подходит для тех, кто только начинает работать с базами данных и нуждается в выполнении запросов и отчетов на базе данных Snowflake или переходит с таких баз данных, как Oracle, SQL Server или MySQL, на облачные платформы.
#db
👉 @database_info
Высокопроизводительные базы данных от @Selectel
А вы знали, что облачные базы данных Selectel — одни из самых производительных на диком западе рынке? Все потому, что они работают на действительно мощном железе: процессорах Intel® Xeon® Gold 6454 и AMD EPYC™, высокочастотных планках оперативной памяти, а также NVMe локальных дисках в конфигурации RAID10.
Чтобы вы могли выжать максимум из облачных баз данных, коллеги прокачали их еще сильнее, а именно: увеличили параметры производительности дисковой подсистемы IOPS в 3,5 раза (до 90 000 IOPS) и пропускной способности — в 2,5 раза (до 1000 МБ/c).
Главные преимущества DBaaS в Selectel:
▫️В Selectel большой выбор систем управления базами данных: PostgreSQL, MySQL, TimeScaleDB, Apache Kafka и даже Redis.
▫️ Развернуть отказоустойчивый кластер можно всего в пару кликов в панели управления.
▫️ Облачные базы данных Selectel соответствуют основным стандартам безопасности, включая 152-ФЗ, PCI DSS 3.2.1, ISO 27001, ISO 27017, ISO 27018.
Переходите по ссылке и создайте высокопроизводительный кластер облачных баз данных за минуту: https://slc.tl/vrdv1
Реклама ООО «Селектел» erid 2Vtzqupy26t
SQL (проектирование баз данны, база PostgreSQL)
00:00 Нормализация базы данных
05:32 OneToMany
07:10 OneToOne
07:31 ManyToMany
08:55 Практика. Готовим тестовые данные.
11:48 JOIN
14:00 INNER JOIN
18:15 CROSS JOIN
19:38 LEFT JOIN
22:07 Визуальное сравнение разных JOIN
24:13 RIGHT JOIN
24:49 FULL JOIN
25:13 GROUP BY, HAVING
27:38 ALTER
30:11 Что еще можно изучить?
33:00 Задания
источник
#db
👉 @database_info
Порядок выполнения SQL-запросов
#db
👉 @database_info
Вы инженер связи, слаботочник или ИТ-шник, или безопасник? Обратите внимание на эту выставку, не пропускаю ее никогда. Мало вообще посещаю мероприятия не-онлайн, но тут делаю исключения.
Точка притяжения для телеком-специалистов, инженеров и сисадминов. Связь, телеком, интернет вещей, ЦОДы и оборудование.
На @sviaz_expocentr вход свободный по электронной регистрации на сайте.
Если ИТ и телекоммуникации ваша работа, увидимся на "Связи" 2024.
👉 @database_info
Пример рекурсивного запроса для работы с иерархией в postgres
СУБД postgres предоставляет специальный синтаксис для работы с иерархиями с помощью рекурсивного запроса. Такой запрос начинается с ключевых слов with recursive.
В этом видео мы создадим простую иерархию географических объектов в виде таблицы. Затем напишем рекурсивный запрос, чтобы наглядно отобразить весь путь от одного из самых низкоуровневых элементов и до самой вершины иерархии. Таким образом, мы как бы собираем по пути "хлебные крошки" (breadcrumbs), которые могут пригодиться, если этот путь мы хотим отобразить пользователю.
источник
#db
👉 @database_info
Уже работаете с k8s? Настало время расширить стек!
Kubernetes: Мега — продвинутый курс Слёрма для тех, кто хочет понять структуру технологии и научиться самостоятельно решать сложные задачи.
Что будет на курсе:
❓создание отказоустойчивого кластера изнутри и аутентификацию пользователей в кластере;
❓ stateful приложения в кластере;
❓ хранение секретов;
❓ horizontal Pod Autoscaler;
❓ резервное копирование кластеров и служебные сертификаты;
❓ deploy и service mesh.
Вас ждут подробные видеолекции, практика на стендах в личном кабинете, АМА-сессии со спикерами и чат с куратором и другими участниками курса.
Старт нового потока на этой неделе!
ПОДРОБНОСТИ О КУРСЕ
Хранимые процедуры в SQL
В этой статье разберемся с хранимыми процедурами. Напомню, что мы работаем в СУБД MySQL, если вы работаете в другой СУБД, то некоторые синтаксические конструкции могут отличаться, но суть остается такой же.
https://telegra.ph/Hranimye-procedury-v-SQL-04-16
#SQL
👉 @database_info
Как посчитать для каждой строки таблицы количество вхождений этой строки в другую таблицу?
Есть две таблицы course и history
В таблице course: id и name
В таблице history: id, course_id, status
Нужно для каждой строчки course посчитать количество строк в history
На выходе должно быть см. скрин
ОтветSELECT name AS course_name, COUNT(history.id) AS quantity
FROM course
LEFT JOIN history ON course_id = course.id AND status = 1
GROUP BY name
#db
👉 @database_info
Как интегрировать PostgreSQL с Node.js и Next.js?
Расскажет опытный эксперт на бесплатном практическом уроке от OTUS.
✅ На вебинаре рассмотрим:
- как интегрировать postgres в backend на Node.JS.;
- разбор популярных ORM для интеграции;
- как делать миграции;
- как интегрировать postgres с UI на базе Next.js.
Встречаемся 17 апреля в 20:00 мск в рамках старта большого курса «PostgreSQL Advanced». Все участники вебинара получат специальную цену на обучение и консультацию от менеджеров OTUS!
➡️ Пройдите короткий тест прямо сейчас, чтобы посетить бесплатный урок: пройти тестРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Шардинг как паттерн архитектуры базы данных
Шардинг (сегментирование) — паттерн архитектуры базы данных, предполагающий разбиение базы данных на более мелкие, быстрые и управляемые части, называемые шардами (сегментами). Каждый шард представляет собой отдельную базу данных, а в совокупности эти шарды составляют единую базу данных. Шардинг особенно полезен для управления крупными базами данных, обеспечивая значительное повышение производительности, удобство обслуживания и масштабируемость.
https://lab.scub.net/architecture-patterns-sharding-09f759150d3d
#db
👉 @database_info
SQL Cookbook: Query Solutions and Techniques for All SQL Users
Автор: Anthony Molinaro, Robert de Graaf (2020)
Возможно, вы знаете основы SQL, но используете ли все возможности в полной мере? Программисты, использующие SQL, аналитики, специалисты по обработке данных, администраторы баз данных и даже относительно обычные пользователи SQL могут воспользоваться данным ценным руководством по решению повседневных проблем.
Второе издание включает:
✔️Полностью переработанные рецепты;
✔️Дополнительные рецепты, отражающие широкое распространение общих табличных выражений для более читаемых и простых в реализации решений;
✔️Новые рецепты, которые сделают SQL более полезным для людей, не являющихся экспертами по базам данных, включая специалистов по данным.
#db
👉 @database_info
Курс по T-SQL
Создание таблиц
Заполнение таблиц
Блоки запроса: select, from, where, group by
Условие отбора. Использование LIKE, BETWEEN, AND, OR
NULL и как с этим работат
Изменение данных: DELETE WHERE, UPDATE WHERE
Псевдонимы столбцов и как убрать дубликаты строк при выводе на экран
Таблицы: постоянные, в виде подзапроса, временные #, представления view
Связи между таблицами:inner join, left join, right join, cross join, full join
Рекурсивные соединения таблиц или как соединить одинаковые таблицы
источник
#db
👉 @database_info
Шпаргалка по SQL (postgres), которая выручает меня на собесах
Вопросы, рассмотренные ниже мне задавали на собеседованиях на позицию python-разработчика. Естественно отвечать правильно получалось не всегда, а если точнее то чаще не правильно, однако проведя N часов в рефлексии я составил перечень ответов, которыми пользуюсь до сих пор.
Данная информация предполагает знание основ языка запросов и я надеюсь, она окажется полезной для разработчиков, которые сейчас активно ищут работу а также, что ты прочитаешь этот текст до конца и добавишь свой вопрос к перечню (ну или поправишь неточности в существующих)
https://habr.com/ru/articles/745948/
#db
👉 @database_info
✅ Изучаем конфигурации PostgreSQL на открытом практическом уроке от OTUS
🔹На вебинаре рассмотрим оптимальные способы конфигурирования PostgreSQL, а также научимся тестировать наши конфигурации при помощи sysbanch, pgbench и бонус.
Вебинар будет полезен разработчикам SQL, архитекторам и DBA.
Встречаемся 4 марта в 20:00 мск в рамках курса «PostgreSQL для администраторов баз данных и разработчиков».
👉 Регистрация
https://otus.pw/vcMJ9/?erid=LjN8K85uK
Потенциальные проблемы с автоинкрементным ключом. MySQL <8.0, PostgreSQL
В данной публикации я поделюсь двумя основными причинами, по которым я предпочитаю избегать использования автоинкрементных полей в PostgreSQL и MySQL в будущих проектах. Вместо этого я предпочитаю использовать UUID-поля, за исключением случаев, когда есть очень веские аргументы против этого подхода.
https://habr.com/ru/articles/807751/
original https://samwho.dev/blog/practical-problems-with-auto-increment/
#db
👉 @database_info
Чувствуешь, что для карьерного роста в ИБ нужно подтянуть актуальный стек технологий?
Мы знаем, что делать! Всего за пару часов ты сможешь:
- изучить популярные подходы к защите инфраструктуры;
- разобраться, что такое ZTNA и почему это важно сегодня;
- познакомиться с концепцией SASE и вспомнить о концепциях безопасности SoD.
Приходи на бесплатный практический урок «Основные принципы обеспечения информационной безопасности стека приложений и инфраструктуры». Спикер Александр Горячев — опытный инженер по информационной безопасности инфраструктуры.
Урок пройдет 26 апреля в 20:00 мск и будет приурочен к старту большого курса «Внедрение и работа в DevSecOps». После вебинара ты получишь специальную цену на обучение и консультацию от менеджеров!
Пройди короткий тест прямо сейчас, чтобы посетить бесплатный вебинар: https://vk.cc/cwlCeo
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
⁉️ Как инженеру данных повысить квалификацию и увеличить доход в 2024?
👉 Освойте Spark и узнайте все секреты обра️ботки больших данных!
- Погрузитесь в мир распределенных вычислений
- Получите практические навыки работы с Apache Spark
- Прокачайте навыки в области обработки больших данных и станьте востребованным специалистом!
Стартуем 25 апреля, есть рассрочка и специальная цена.
💻 Пройдите короткий тест прямо сейчас и получите подарочные уроки: https://vk.cc/cwlAOk
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
SQL (Основы языка, база PostgreSQL)
00:00 Введение
01:32 Реляционные базы данных
05:22 Установка PostgreSQL
06:46 Подключение к базе через Idea
10:31 CREATE DATABASE
11:44 CREATE SCHEMA
13:35 CREATE TABLE
15:10 INSERT
16:11 SELECT
16:27 Множественный INSERT
17:57 DROP TABLE
18:17 UNIQUE, NOT NULL
19:34 PRIMARY KEY
20:16 Автогенерация PRIMARY KEY
21:58 LIMIT, OFFSET
24:40 WHERE
27:50 Все группы SQL команд
30:15 UPDATE
32:00 FOREIGN KEY
37:43 Diagram. Визуализация таблиц
38:06 SELECT из нескольких таблиц
41:00 ORDER BY (сортировка)
42:00 DISTINCT
42:20 COUNT
42:32 SUM, AVG
43:16 Дополнительные возможности SELECT
45:22 DELETE (Каскадное удаление)
49:33 Полезные функции
52:18 Задание
источник
#db
👉 @database_info
#вакансия #job #vacancy #remote #parttime #преподаватель #educator #PostgreSQL #NoSQL #DWH
Время делиться знаниями!
Компания: OTUS – образовательная платформа. За более чем 7 лет работы мы создали более 180 авторских курсов для IT-специалистов разного уровня от Junior до Senior. Практически на каждом нашем курсе есть вступительное тестирование для наших студентов, плюс более 650 преподавателей-практиков из крупнейших компаний. Мы учимся друг у друга, советуемся, помогаем, делимся опытом и обсуждаем новости как в преподавании, так и в IT.
Вакансия: преподаватель онлайн-курсов (интересные темы по программе курса и нагрузку можно выбирать):
«PostgreSQL Advanced»
«NoSQL»
«Data Warehouse Analyst»
Формат: удалённая работа.
Занятость: частичная.
Требуется практический опыт по тематике курса. Можно без опыта преподавания. Мы с удовольствием поможем Вам освоить Best Practices преподавания: для этого у нас есть вводный курс по преподаванию и пробные уроки с методистом.
Преподаватель раскрывает тему урока с помощью теории и примеров из практики.
Условия:
✅стандартное занятие длится 1,5 часа с 20:00 до 21:30 по МСК.
✅ уроки проводятся в онлайн формате в Zoom.
✅ на занятиях используется презентация с теорией и практические примеры, чтобы раскрыть тему урока.
С нами Вы сможете:
✅ внести свой вклад в развитие IT
✅ структурировать свой опыт и знания.
✅ развивать личный бренд.
✅ прокачать софт-скиллы.
✅ получать от 4000 до 6000 руб. за один вебинар (полтора часа) + отдельно оплачивается проверка ДЗ, актуализация материалов к занятиям и другие активности.
Бонусы:
✅ наши курсы со скидкой/бесплатно.
✅ возможность приглашать в свою команду на работу лучших выпускников.
✅ воркшопы и конференции для наших преподавателей.
Подробнее в telegram: @ElenaAlias
Работа с json в PostgreSQL
JSON (JavaScript Object Notation) является одним из наиболее распространенных форматов для передачи и хранения данных. PostgreSQL поддерживает работу с JSON, что позволяет эффективно использовать его возможности для обработки и анализа данных.
JSON является форматом для хранения и передачи данных в форме объектов, массивов и других значений, которые можно легко преобразовать в текстовую строку. PostgreSQL поддерживает хранение данных в формате JSON, а также множество функций для обработки и анализа JSON-данных.
источник
#db
👉 @database_info
Скрипт для создания бекапов БД с помощью Percona XtraBackup
Скрипт предназначен для создания резервных копий баз данных (в субботу — полная резервная копия, в остальные дни — инкрементальные).#!/bin/bash
# Скрипт делает резервную копию БД
# если сервер MySQL не запущен, то выходим
MYADMIN="/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf"
ping_output=`$MYADMIN ping 2>&1`; ping_alive=$(( ! $? ))
if [ $ping_alive = 0 ]; then
logger -t mysql-backup 'MYADMIN ping FAIL'
exit
fi
BACKUP="/usr/bin/innobackupex-1.5.1 --no-lock"
workdir="/usr/local/tmp/"
DofW=`date +'%u'`
full=0
incr=0
# если суббота - делаем полный бекап, иначе инкрементальный
if [ "$DofW" = "6" ];
then
full=1
logger -t mysql_backup 'make full backup'
else
incr=1
logger -t mysql_backup 'make incremental backup'
fi
if [ $full == '1' ];
then
logger -t mysql_backup 'start mysql full backup'
dump="mysql"`date +%Y%m%d`"full.tar"
ext=".gz"
# при распаковке использовать ключ -i, например tar -ixvf backup.tar
$BACKUP --user=USER --password=PASSWORD --stream=tar ./ | pigz -p 5 > ${workdir}${dump}${ext}
logger -t mysql_backup 'finish mysql full backup, start rsync'
# с помощью rsync копируем резервную копию на удаленный сервер
rsync --bwlimit=5000 ${workdir}${dump}${ext} 192.168.0.4::backup
logger -t mysql_backup 'finish rsync'
rm -f ${workdir}/mysql*
fi
if [ $incr == '1' ];
then
logger -t mysql_backup 'start mysql incremental backup'
# получаем значение LSN из последнего лога бекапа
LSN=`cat /usr/local/sbin/innobackupex.log | grep "The latest check point (for incremental):" | awk -F"'" '{print $2}' | tail -n 1`
echo $LSN > /usr/local/sbin/lsn
dump="mysql"`date +%Y%m%d`"incr"
archiv="mysql"`date +%Y%m%d`"incr.tar.gz"
ext=".tar.gz"
$BACKUP --user=USER --password=PASSWORD --incremental --incremental-lsn=$LSN --stream=xbstream ./ > ${workdir}${dump}.xbstream
logger -t mysql_backup 'finish mysql incremental backup, start tar'
cd ${workdir}
tar -czf $archiv $dump.xbstream
rm -f ${workdir}/*.xbstream
logger -t mysql_backup 'finish tar, start rsync'
# с помощью rsync копируем резервную копию на удаленный сервер
rsync --bwlimit=5000 ${workdir}${dump}${ext} 192.168.0.4::backup
logger -t mysql_backup 'finish rsync'
rm -f ${workdir}/mysql*
fi
#Percona #XtraBackup
👉 @database_info
🚀 Освойте мониторинг и управление производительностью в Spark
👉 Приходите на бесплатный практический урок от OTUS, где вы вместе с опытным экспертом разберете:
— какие ключевые показатели производительности (KPIs) следует отслеживать для приложений Spark;
— подходы и практики для настройки мониторинга в реальном времени в кластерах Spark;
— инструменты и платформы для мониторинга и логирования;
— стратегии для сбора, анализа и визуализации метрик и логов в приложениях Spark.
💻 Встречаемся 18 апреля в 20:00 мск в рамках курса «Spark Developer». Доступна рассрочка на обучение!
🔥 Пройдите короткий тест прямо сейчас, чтобы посетить бесплатный урок и получить запись: https://vk.cc/cwdRTe
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
🖥 Разрешите Oracle Database создавать новые list partitions при вставке с помощью auto-list partitioningCREATE TABLE ... ( ...)
PARTITION BY LIST ( <partition_col> )
AUTOMATIC
( PARTITION ... )
Всякий раз, когда вы вставляете новое значение для <partition_col>, база данных создает для него раздел
#db #Oracle
👉 @database_info
SQL за полтора часа в одном видео! Полный базовый курс по SQL. Базы данных курс для начинающих!
00:00:00 Введение
00:02:43 Платные курсы и что изучать дальше
00:04:55 Коротко об онлайн редакторе
00:07:11 Что такое база данных
00:08:10 Что такое CRUD
00:10:05 Запрос на создание первой таблицы
00:11:57 Типы данных у атрибутов(колонок) (DATA TYPES)
00:17:26 Прописываем атрибуты(колонки) первой таблицы
00:21:07 Создаем первую таблицу (CREATE TABLE)
00:21:38 Проверка на наличие таблицы при создании (IF NOT EXISTS)
00:22:18 Запрос на удаление таблицы(DROP TABLE)
00:22:33 Проверка на наличие таблицы при удалении(IF EXISTS)
00:22:57 Запрос на добавление объекта в таблицу (INSER INTO table)
00:23:35 Запрос на чтение(получение) объектов из таблицы(SELECT * FROM table)
00:24:18 Модификаторы для атрибутов(колонок) таблицы(NOT NULL, DEFAULT, UNIQUE)
00:29:26 Изменение уже существующей таблицы(ALTER TABLE, ADD, DROP, RENAME, MODIFY COLUMN)
00:36:08 Удаление объектов из таблицы(DELETE FROM table)
00:37:06 Редактирование объекта в таблице(UPDATE table)
00:39:03 Первичный ключ(PRIMARY KEY)
00:45:37 Композиция в бд
00:50:38 "Иностранный" ключ(FOREIGN KEY)
00:57:26 Индексы в бд(INDEX)
00:59:24 Готовим данные для темы алиас, юнион и слияние таблиц
01:03:30 Слияние таблиц(INNER JOIN)
01:06:02 Слияние таблиц(LEFT JOIN)
01:06:53 Слияние таблиц(RIGHT JOIN)
01:07:26 Слияние таблиц(FULL JOIN/OUTER JOIN) и Union
01:09:04 Алиас(table AS alias)
01:12:18 Select Distinct в SQL
01:13:42 AND OR NOT в SQL
01:16:18 ORDER BY и LIMIT в SQL
01:17:35 MIN и MAX в SQL
01:18:25 COUNT SUM AVG в SQL
01:19:29 LIKE в SQL
01:21:31 IN и BETWEEN в SQL
01:22:50 GROUP BY в SQL
01:25:17 EXISTS в SQL
01:27:37 ANY и SOME в SQL
01:29:00 INSERT INTO в SQL
01:30:40 Отношения в базе данных
01:32:11 Отношения один к одному
01:33:09 Отношения один ко многим
01:34:09 Отношения многие ко многим
01:37:10 Отношения один к одному и один ко многим "через"
01:39:10 SQL инъекции
источник
#db
👉 @database_info