Введение в базы данных

Неполные данные и null

Что означает null?

Содержание

Что означает null?

  • Значение не существует
    • Студент зачислен, но не определен в группу
  • Значение не известно
    • Студент неизвестно какой группы
  • Значение не верно
    • Студент группы XXXX
  • Неприменимо
    • Группа отчисленного студента
  • Недоступно
    • Нет права узнать группу

Можно ли обойтись без null?

  • Представление отсуствующих значений
    • Как представить кортеж, с неопределенными частями?
    • Необязательная связь 1:1
  • Где еще появляется null?
    • Множественные операции
    • Внешние соединения
    • ⇒ без null не обойтись

Операции с null

Содержание

Тернарная логика

$p$$q$$p ∧ q$$p ∨ q$$¬ p$$p = q$$p$ is N $p$ is not N
T T T T F T F T
T N N T F F F T
T F F T F F F T
N T N T N F T F
N N N N N F T F
N F F N N F T F
F N F T T F F T
F N F N T F F T
F F F F T T F T
  • ∀ — большая ∧
  • ∃ — большая ∨

Скалярные операции

  • null заразен
    • +, , *, /
    • =, <>
  • coalesce

Null и дубликаты

  • Как сравнивать кортежи, содержащие null?
  • Чему равно $R ∪ R$?
  • Чему равно $R ∩ R$?
  • Чему равно $R ⋈ R$?
    • $R ⋈ R ≠ R$

Спецэффекты

  • Чему равно x = x?
    • true или null
  • Чему равно x <> x?
    • false или null
  • Чему равно x or x?
    • x
  • Чему равно x or not x?
    • true или null
  • Чему равно x and not x?
    • false или null
  • Транзитивность сравнения?

Null и ключи

  • Первичные ключи
    • Не могут содержать null
  • Альтернативные ключи
  • Внешние ключи
    • Простые
    • Составные
  • Что происходит при операциях?
    • Можно получить отношение со всеми полями null

Null не интутитивен

  • Студенты не учащиеся в группе M3439
    • select * from Students where GId <> M3439;
      
    • Корректность зависит от смысла null

Null и SQL

Содержание

Предикаты

  • where
  • having
    • Остаются только true

Типы столбцов

  • nullable (по умолчанию)
    • birthday date
      
  • Не nullable
    • birthday date not null
      

Проверки значений

  • Синтаксис
    • значение is [not] {true|false|null}
      
  • Примеры
    • x is null
      x is not true
      (x or x) is not null
      

Прочее

  • exists
    • Только true или false
    • nullfalse
  • Агрегирующие функции
    • Пропускают null
    • Без аргументов ⇒ null
    • Кроме count(*)

Литература

Содержание

Основная литература

  • Дейт К. Введение в системы баз данных (глава 19)