Shanraq.org Shanraq.org
Таблица, строка, столбец и NULL: сначала модель бюджета
IT

Таблица, строка, столбец и NULL: сначала модель бюджета

Разбираем четыре сущности проекта — счета, категории, операции и лимиты — и учимся отличать отсутствие значения от нуля. До синтаксиса важно понять, какой факт хранит каждая строка.

Зачем это нужно

Плохая модель заставляет каждый запрос угадывать смысл данных. Если в одной ячейке написано Еда / карта / 49800, человеку ещё понятно, а базе неизвестно, где категория, где счёт и где сумма.

Образ. Одна строка — одно законченное предложение. Операция 7 произошла 10 сентября, со счёта Карта, в категории Транспорт, на 6800 тенге. Если строка рассказывает сразу о нескольких разных событиях, её трудно проверить.

Сразу целиком

SELECT id, happened_on, amount_tiyn, note
FROM transactions
ORDER BY happened_on, id;

Таблица — множество строк одного вида. Столбец задаёт роль значения. Первичный ключ id устойчиво называет строку. Внешние ключи account_id и category_id связывают её с другими таблицами.

Разбор

Наши сущности:

  • accounts — места хранения денег;
  • categories — смысл дохода или расхода и необязательный лимит;
  • transactions — произошедшие денежные события;
  • месячный отчёт — вычисляемый результат, а не ещё одна копия фактов.

NULL означает «значение неизвестно или неприменимо». Лимит зарплаты равен NULL, потому что ограничивать доход расходным лимитом не нужно. Нулевой лимит означал бы другое: тратить нельзя совсем.

Сравнение = NULL никогда не даёт TRUE. Пишут IS NULL:

SELECT name
FROM categories
WHERE monthly_limit_tiyn IS NULL;

Трёхзначная логика SQL содержит TRUE, FALSE и UNKNOWN. Поэтому ограничение даты в проекте проверяет и результат date(...) IS NOT NULL: выражение bad = NULL само по себе не запрещает строку в CHECK.

Карта урока

Одна строка — один факт, NULL — не ноль

Скажите своими словами

  1. Какой факт хранит строка transactions?
  2. Чем NULL отличается от нуля и пустой строки?
  3. Зачем строке устойчивый ключ?

Задание

Напишите запрос, который покажет категории без месячного лимита. Верните только name и kind.

Куда это встанет в проекте

Модель станет схемой базы. Отчёт будет вычисляться из исходных операций, поэтому обновлять две копии одного итога не придётся.

Ответы

Показать ответы
SELECT name, kind
FROM categories
WHERE monthly_limit_tiyn IS NULL;

Источники

Если вы нашли ошибку или опечатку в тексте статьи, то сообщите нам об этом

Проверить задание

Сначала решите и запустите в VS Code — редактор покажет ошибку на месте. Готовое решение вставьте сюда. Проверяет модель: она укажет на ошибку, но не даст готовый ответ.

Чтобы проверить, нужно войти. Войти

Комментарии (0)

Пока нет комментариев. Будьте первым.