Неполные данные и null — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
м
м
Строка 2: Строка 2:
  
 
== Что означает null ==
 
== Что означает null ==
Представим себе таблицы студентов ИТМО ''Students(StudentId, StudentName, GroupId)'' и ''Groups(GroupId, GroupName)''. Что может означать тот факт, что у студента '''null''' в столбце GroupId?
+
Представим себе таблицы в БД университета ИТМО  
 +
* ''Students(StudentId, StudentName, GroupId)''
 +
* ''Groups(GroupId, GroupName)''
 +
Что может означать тот факт, что у студента '''null''' в столбце GroupId?
 
* Значение неизвестно (нет информации, из какой группы студент)
 
* Значение неизвестно (нет информации, из какой группы студент)
 
* Значение неверно (студент учится в какой-то группе, но эта группа не представлена в БД)
 
* Значение неверно (студент учится в какой-то группе, но эта группа не представлена в БД)
* Значение еще/уже не существует (например, студент был зачислен, но еще не распределен в группу или уже отчислен)
+
* Значение еще/уже не существует (студент был зачислен, но еще не распределен в группу или уже отчислен)
 
* Значение не имеет смысла (студент из другого университета, который пришел с какими-то целями в ИТМО)
 
* Значение не имеет смысла (студент из другого университета, который пришел с какими-то целями в ИТМО)
 
* Значение недоступно (недостаточно прав узнать группу)
 
* Значение недоступно (недостаточно прав узнать группу)
Строка 11: Строка 14:
 
Вполне возможно, что возникнет необходимость различать разные виды того, что значение в том или ином смысле отсутствует
 
Вполне возможно, что возникнет необходимость различать разные виды того, что значение в том или ином смысле отсутствует
 
== Можно ли обойтись без null? ==
 
== Можно ли обойтись без null? ==
 +
Как представить кортеж с неопределенными частями в нашем случае?
 +
* Разбить на 2 группы и сделать необязательную связь 1:1. В таком случае, в дополнительной таблице будет запись ''(StudentId, GroupId)'' тогда и только тогда, когда у студента определена группа
 +
=== Где еще появляется null ===
 +
* Результаты внешних соединений
 +
* Результаты множественных операций
 +
Оказывается, что в некоторых случаях без null не обойтись и надо уметь с ним работать
 
== Операции с null ==
 
== Операции с null ==
todo
+
=== Тернарная логика ===
 +
==== Логические операции ====
 
== Null и SQL ==
 
== Null и SQL ==
 
todo
 
todo

Версия 12:50, 20 декабря 2021

Эта статья находится в разработке!

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

Представим себе таблицы в БД университета ИТМО

  • Students(StudentId, StudentName, GroupId)
  • Groups(GroupId, GroupName)

Что может означать тот факт, что у студента null в столбце GroupId?

  • Значение неизвестно (нет информации, из какой группы студент)
  • Значение неверно (студент учится в какой-то группе, но эта группа не представлена в БД)
  • Значение еще/уже не существует (студент был зачислен, но еще не распределен в группу или уже отчислен)
  • Значение не имеет смысла (студент из другого университета, который пришел с какими-то целями в ИТМО)
  • Значение недоступно (недостаточно прав узнать группу)

На основе этих предположений можно сделать вывод, что значение null сильно зависит от контекста (какую предметную область мы моделируем итд.).
Вполне возможно, что возникнет необходимость различать разные виды того, что значение в том или ином смысле отсутствует

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

Как представить кортеж с неопределенными частями в нашем случае?

  • Разбить на 2 группы и сделать необязательную связь 1:1. В таком случае, в дополнительной таблице будет запись (StudentId, GroupId) тогда и только тогда, когда у студента определена группа

Где еще появляется null

  • Результаты внешних соединений
  • Результаты множественных операций

Оказывается, что в некоторых случаях без null не обойтись и надо уметь с ним работать

Операции с null

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

Логические операции

Null и SQL

todo