SQL и БД | Базы данных
SQL, PostgreSql, Базы данных
В публикациях есть гайды, задачи, запросы и шпаргалки.
- Каналов в рубрике
- 1 730
- Место этого канала
- № 704
Дашборд
13 октября — 19 октября 2026
Загрузка…
Главные числа
Рост аудитории
+2подписчиков за период
+1 самый большой прирост · 18 окт 2026
Индекс качества
Индекс качества пока не рассчитан. Он появляется у каналов от 500 подписчиков, которые публикуют посты хотя бы раз в неделю, после недели наблюдения.
Просмотры и охват
52просмотров за период 38,8 %
Средний охват поста — 16 просмотров (посты старше двух суток).
Вовлечённость подписчиков
5,77 %ER = реакции ÷ просмотры 4,6 п. п.
Индекс цитируемости
Индекс цитируемости пока не рассчитан: он появится после ночного расчёта, когда канал упомянут другие каналы.
Когда и сколько публикует
Форматы публикаций
Каждый пост — точка
Выше — больше просмотров, крупнее — больше реакций. Нажмите на точку, чтобы открыть пост.
Итоги периода
Нажмите на показатель — ниже он появится по точкам периода
Реклама в канале
Лучшие публикации
По просмотрам за период
Публикации по дням
Бледные столбики — дни, линия — среднее за 7 дней: видно, разгоняется канал или затихает
Данные обновлены в 18:19 по Москве. Просмотры — текущие у постов, вышедших в эти дни; средний охват — по постам старше двух суток. Как считается индекс качества
Публикации за период
Загрузка…
Основная ошибка при выборе типа данных — выбирать на всякий случай побольше
Примеры антипаттернов:
⛔VARCHAR(255) для всего подряд, даже если код строки состоит из 5 символов
⛔TEXT для email-адресов
⛔BEGINT для счетчика, где максимум 100 записей
⛔FLOAT для денег (потеря точности)
Как правильно
✅Размер строки выбирать под задачу
✅VARCHAR(50) - для email
✅CHAR(2) - для код страны
✅NUMERIC(10, 2) или DECIMAL - для денег
✅BOOLEAN - для булевых значений
✅DATE или TIMESTAMP - для даты
🔥При правильно подобранных типах меньше багов, больше свободного места и быстре выполняются запросы
Оператор BETWEEN в SQL проверяет, попадает ли значение столбца в указанный диапазон, причём обе границы включаются. Он делает код более читаемым, заменяя пару сравнений (>= и <=) одним удобным условием.
Синтаксис:
WHERE col1 BETWEEN 5 AND 10
Это эквивалентно:
WHERE col1 >= 5 AND col1 <= 10
⚠Оператор BETWEEN является включающим, то есть включает граничные значения в результаты
Оператор ORDER BY в SQL используется для сортировки строк в результате запроса и позволяет явно задать, как упорядочить данные.
⚠По умолчанию сортировка выполняется по возрастанию:
SELECT *
FROM table_name
ORDER BY column_name
Чтобы указать направление сортировки, добавьте ASC (по возрастанию) или DESC (по убыванию):
ORDER BY column_name DESC
ORDER BY column_name ASC
⚠Можно сортировать данные по нескольким столбцам. Первый указанный столбец имеет приоритет, а последующие столбцы используются для разрешения равенства значений.
SELECT *
FROM competition
ORDER BY age DESC, speed DESC
Проектирование SQL-базы данных — это баланс между нормализацией (для минимизации избыточности) и практичностью (для скорости чтения).
Концептуальная модель
Прежде чем писать SQL, нарисуйте ERD (диаграмму «сущность-связь»). Это помогает наглядно увидеть связи между данными, обсудить требования с командой или заказчиком и избежать ошибок на раннем этапе.
Принцип нормализации
Разделяйте данные на логические сущности (например, отдельно «Пользователи», «Товары», «Заказы») и избегайте дублирования информации. Это снижает избыточность, упрощает обновления и уменьшает риск ошибок.
Используйте первичные и внешние ключи
Первичный ключ однозначно идентифицирует запись в таблице. Внешние ключи устанавливают связи между таблицами, обеспечивая целостность данных. Не пренебрегайте опциями ON DELETE и ON UPDATE (например, CASCADE, SET NULL) — они определяют, что произойдёт с зависимыми записями при изменении или удалении родительской.
Используйте подходящие типы данных
Выбирайте типы данных осознанно. Не используйте NVARCHAR(MAX) или TEXT без крайней необходимости — это может занимать больше места и замедлять операции. Для числовых значений используйте DECIMAL или INT, для дат — DATE. Для уникальных идентификаторов (например, в связке с внешними ключами) часто удобны суррогатные ключи (INT IDENTITY), а не составные.
Оптимизируйте индексы
Индексы ускоряют выполнение запросов, но их нужно применять разумно. Создавайте индексы на столбцах, которые часто используются в условиях WHERE, при сортировках или в предложениях JOIN. Однако не переусердствуйте: каждый индекс замедляет операции вставки и обновления. Избегайте индексации столбцов с очень малым количеством уникальных значений (например, «Пол»).
Применяйте ограничения для качества данных
Используйте NOT NULL для полей, которые обязаны иметь значение. Для проверки допустимости значений (например, чтобы цена была положительной) применяйте CHECK. Это встроенная защита от некорректных данных.
Избегайте излишней сложности
Не пытайтесь сразу создать максимально сложную схему. Иногда избыточная нормализация или денормализация (когда данные денормализованы ради скорости чтения) могут навредить. Принимайте решение, исходя из реальных запросов приложения, а не из теоретических идеалов.
Документируйте схему
Добавляйте комментарии к таблицам, столбцам и связям. Это сильно упрощает поддержку базы данных в будущем.
Специфика проекта
Не существует универсального рецепта — оптимальная структура зависит от требований, объёма данных и нагрузки. Например, для аналитической базы данных (OLAP) денормализация может быть оправдана, но для оперативной обработки транзакций (OLTP) она часто снижает производительность.
Тестирование
После проектирования создайте тестовые данные и проверьте, как работают связи и индексы. Если обнаружатся узкие места (медленные запросы, избыточное использование индексов), вносите изменения и повторяйте процесс.
Как это работает
Когда вы пишете SET NOCOUNT ON, SQL Server перестаёт генерировать и отправлять эти сообщения. При этом сам запрос выполняется как обычно — данные обновляются, вставляются или удаляются, меняется только обратная связь с клиентом.
Важный нюанс
Функция @@ROWCOUNT всё равно обновляется даже при SET NOCOUNT ON. Если вам нужно программно узнать, сколько строк затронула конкретная инструкция внутри процедуры, вы можете смело использовать @@ROWCOUNT.
Для чего это нужно
Основная польза — в снижении сетевого трафика. В хранимых процедурах, особенно тех, что содержат циклы или несколько инструкций, отправка множества таких сообщений может заметно замедлять работу из-за накладных расходов на передачу данных. Подавляя их, вы уменьшаете объём передаваемой информации, что положительно сказывается на производительности.
Ещё один сценарий — работа с клиентскими приложениями, которые парсят эти сообщения. Иногда фреймворки ожидают определённый формат и могут выдать ошибку, если в потоке появляются неожиданные результирующие наборы. SET NOCOUNT ON помогает избежать такх конфликтов.
Как применять
Обычно эту директиву ставят в самом начале хранимой процедуры или триггера, сразу после объявления параметров. Часто рекомендуют также вернуть настройку в исходное состояние (SET NOCOUNT OFF) перед тем, как процедура начнёт возвращать результирующие наборы (например, через SELECT).
Пример:
CREATE PROCEDURE UpdateUserBalance @UserID INT, @Amount DECIMAL(18,2) AS
BEGIN
SET NOCOUNT ON;
UPDATE Users SET Balance = Balance + @Amount WHERE UserID = @UserID;
SET NOCOUNT OFF;
END
Варианты использования:
COUNT(*) — подсчитывает все строки в таблице, включая те, где есть значения NULL. Это самый надёжный способ узнать общее физическое количество записей.
COUNT(column_name) — считает только те строки, где значение в указанном столбце **не равно NULL. Строки с NULL` в этом столбце игнорируются.
COUNT(DISTINCT column_name) — возвращает количество уникальных значений в указанном столбце, при этом значения NULL не учитываются.
Примеры запросов:
SELECT COUNT(*) FROM employees;
(Общее число записей в таблице)
SELECT COUNT(*) FROM employees WHERE department_id = 10;
(Количество сотрудников с id=10)
SELECT COUNT(phone_number) FROM employees;
(Количество сотрудников у которых указан номер телефона)
SELECT COUNT(DISTINCT department_id) FROM departments;
(Количество уникальных отделов в таблице)
Cursor провела необычный эксперимент: агентам выдали только официальную документацию SQLite объёмом 835 страниц и поручили с нуля реализовать собственный движок базы данных на Rust.
Без интернета, готового исходного кода и дополнительной помощи.
Уже через четыре часа получившиеся реализации правильно выполняли 73–85% запросов из скрытого теста. После дальнейшей работы некоторым командам удалось довести результат до 100%.
Но особенно удивила стоимость:
- связка Opus 4.8 и Composer 2.5 потратила около $1 400;
- Fable — примерно $20 000.
Одинаковая задача, но почти пятнадцатикратная разница в цене.
Во время разработки агенты столкнулись знакомыми командными проблемами: дублировали работу, конфликтовали при изменении одних и тех же файлов и избегали трогать ядро системы, даже когда без этого было невозможно двигаться дальше.
Получается, ИИ уже способен за часы собрать сложный системный проект.
#ai #rust #sqlite #agents
Используется для округления числового значения до указанного количества десятичных знаков.
Синтаксис
ROUND(Number, n)
Number - Число или колонка, которую хотите округлить
n - Количество знаков после запятой для округления
Пример базового округления целых чисел:
SELECT ROUND(5.8, 0)
Возвращает 6.0
SELECT ROUND(3.3, 0)
Возвращает 3.0
SELECT ROUND(10.5, 0)
Возвращает - 11.0
Округление до определенного количества знаков после запяттой:
SELECT ROUND(5.14159, 2)
Возвращает 5.14000
❗Если цифра после последнего сохраненного десятичного разряда равна 5 или больше, последний сохраненный разряд округляется вверх
Загрузка…
Загрузка…
Загрузка…
Загрузка…
Загрузка…
Загрузка…
Загрузка…
Загрузка…