Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
NULLのはな
し
2013.7.6 ユルカワPHP#2
VOLARE, INC CTO 田中創基
アンケート
突然ですが
アンケートです
アンケート
該当する人は挙手
アンケート1
アンケート1
アンケート1
SQLで
NULLを使った事
のある人
アンケート2
アンケート2
アンケート2
WHERE a = NULL
と書いて動かず
悩んだ事のある人
アンケート3
アンケート3
アンケート3
SQLのNULLが
他の言語とどう違
うか説明できる人
アンケート4
アンケート4
アンケート4
SQL99の仕様の
UNKNOWNを
知っている人
NULLって
何?
NULLって何?
NULLって何?
基本的には
値が無いって意味
NULLって何?
ぶっちゃけ
NULLって何?
NULLについて
深くは知らない
NULLって何?
だから勉強しよう
NULLって何?
これが今回の
スタート地点です
NULLは
値じゃない
NULLは値じゃない
NULLは値じゃない
値じゃないなら
何だって言うんだ
NULLは値じゃない
エドガー・F・
コッド
曰く
RDBMSの発案者
NULLは値じゃない
「欠損値と不適切
な値」の表現であ
る
NULLは値じゃない
どういうこと?
NULLは値じゃない
NULLとは「ここ
には値がない」と
いう文
NULLは値じゃない
文章では幅を取る
ので「NULL」と
いう簡潔なマーク
で代用している
NULLは値じゃない
NULLは
値ではない
大切なことなので
二度言います
NULLは値じゃない
ちなみにNULL値
と
呼ぶのは間違い
NULLは値じゃない
イメージ
NULLは値じゃない
id 顧客名 取引額 年齢 性別
1 福沢諭吉 10000 56 男
2 慶応義塾大学 10000 null null
3 樋口一葉 5000 20 女
4 野口英世 1000 41 男
5 野口英世記念館 1000 nu...
NULLは値じゃない
id 顧客名 取引額 年齢 性別
1 福沢諭吉 10000 56 男
2 慶応義塾大学 10000
3 樋口一葉 5000 20 女
4 野口英世 1000 41 男
5 野口英世記念館 1000
枠自体がない
NULLは値じゃない
外部結合をしたと
きも構造は一緒
NULLは値じゃない
値がないという
「状態」
NULLは値じゃない
「状態」と「値」
は
演算できない
NULLは値じゃない
だから
a = NULL
は使えない
NULLは値じゃない
「状態」は
「値」ではないか
ら
NULLは値じゃない
INDEXの対象にも
ならない
UNKNOWN
UNKNOWN
UNKNOWN
Boolean型の値
UNKNOWNが追加
されました
UNKNOWN
NULL: 値ではな
い
UNKNOWN: 値
UNKNOWN
NULLで演算を
すると発生します
UNKNOWN
MySQLも
Postgresも
Oracleも未対応
UNKNOWN
NULLを
代用しています
UNKNOWN
ANDとORは
NULLの演算が
可能
例外として
UNKNOWN
演算可能な
NULLが発生
UNKNOWN
これが混乱のもと
UNKNOWN
内部的に
NULL⇄UNKNOW
N
自動型変換
UNKNOWN
自動型変換には
悩みがつきもの
PHPユーザも苦しむ
UNKNOWN
NULLの中身が
どっちか
考えて使うべし
UNKNOWN
そうしないと
思わぬ事故に
UNKNOWN
実際にあった例
UNKNOWN
startとendで期間
start < now() AND
now() < end
としたところ
UNKNOWN
end = NULLの
終了日未定が
出てこなかった
UNKNOWN
対策
NOT NULL
3値理論
3値理論
UNKNOWN
事故はどういうと
きに起こるか
UNKNOWN
WHEREの条件が
UNKNOWNに
なってることが多
い さっきの例も
UNKNOWN
WHERE age >=
20 AND age < 20
は全員か?
UNKNOWN
年齢不明の人が
入らない
どうして
NULLがある
か
どうしてNULLがあるか
どうしてNULLがあるか
UNKNOWNは
Boolean以外でも
ありえる
どうしてNULLがあるか
データを実世界の
データを扱うため
に
不明は必要
どうしてNULLがあるか
UNKNOWNだけ
で
十分では?
どうしてNULLがあるか
足りない
どうしてNULLがあるか
1つのテーブルに
複数のデータタイ
プを入れるため
NULLは値じゃない
id 顧客名 取引額 年齢 性別
1 福沢諭吉 10000 56 男
2 慶応義塾大学 10000
3 樋口一葉 5000 20 女
4 野口英世 1000 41 男
5 野口英世記念館 1000
法人も個人も同じ
テーブ...
どうしてNULLがあるか
UNIONした結果
を
テーブル自体に
どうしてNULLがあるか
OOPの継承を連
想
どうしてNULLがあるか
SQLでは容易に
カラムを増やした
り減らしたりでき
ない
どうしてNULLがあるか
NULL受け入れる
ことで多態性を
用意している
NULLと
上手につきあ
う
UNKNOWNについて
NULLと上手につきあう
1.NULLは値では
ないと意識する
NULLと上手につきあう
2. WHEREの条件
は2値理論に丸め
込む
NULLと上手につきあう
3. 出来る限り
not nullとdefault
の設定をする
NULLと上手につきあう
4. NULL可の
カラムは副次的な
情報に制限する
NULLと上手につきあう
5. 困ったら
COALESCEを使
う
Upcoming SlideShare
Loading in …5
×

Nullのはなし(up用)

5,575 views

Published on

  • 3値理論じゃなくて、3値論理ですし、NULLが文と読めるページ(23ページ)があります。
    SQLの文と紛らわしいです。
    また、a = NULLが使えないような表現がありましたが(33ページ)、これは結果が不定なだけで、これが最終結果として表れると偽と同じように評価されるため「使えないように見える」というだけだという理解です。
    状態と値が演算出来ないというのもちょっとよくわかりません。
    「NULLの中身」という表現もわかりません(47ページ)。
    NULLはなんらかの箱のイメージを持っているのであれば、それは間違いでしょう。
    ANDとORがNULLを扱えるように見えるのは、片方がどうであれもう片方の結果のみで全体の結果が決定可能だからと考えるのが自然でしょう。
    例えば、ORであれば、左の項がTRUEであれば、右の項がたとえ不定(Unknown)であろうがなかろうが全体としてはTRUEと判断できます。
    63ページ以降はよくわかりませんでした。
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Nullのはなし(up用)

  1. 1. NULLのはな し 2013.7.6 ユルカワPHP#2 VOLARE, INC CTO 田中創基
  2. 2. アンケート 突然ですが アンケートです
  3. 3. アンケート 該当する人は挙手
  4. 4. アンケート1 アンケート1
  5. 5. アンケート1 SQLで NULLを使った事 のある人
  6. 6. アンケート2 アンケート2
  7. 7. アンケート2 WHERE a = NULL と書いて動かず 悩んだ事のある人
  8. 8. アンケート3 アンケート3
  9. 9. アンケート3 SQLのNULLが 他の言語とどう違 うか説明できる人
  10. 10. アンケート4 アンケート4
  11. 11. アンケート4 SQL99の仕様の UNKNOWNを 知っている人
  12. 12. NULLって 何? NULLって何?
  13. 13. NULLって何? 基本的には 値が無いって意味
  14. 14. NULLって何? ぶっちゃけ
  15. 15. NULLって何? NULLについて 深くは知らない
  16. 16. NULLって何? だから勉強しよう
  17. 17. NULLって何? これが今回の スタート地点です
  18. 18. NULLは 値じゃない NULLは値じゃない
  19. 19. NULLは値じゃない 値じゃないなら 何だって言うんだ
  20. 20. NULLは値じゃない エドガー・F・ コッド 曰く RDBMSの発案者
  21. 21. NULLは値じゃない 「欠損値と不適切 な値」の表現であ る
  22. 22. NULLは値じゃない どういうこと?
  23. 23. NULLは値じゃない NULLとは「ここ には値がない」と いう文
  24. 24. NULLは値じゃない 文章では幅を取る ので「NULL」と いう簡潔なマーク で代用している
  25. 25. NULLは値じゃない NULLは 値ではない 大切なことなので 二度言います
  26. 26. NULLは値じゃない ちなみにNULL値 と 呼ぶのは間違い
  27. 27. NULLは値じゃない イメージ
  28. 28. NULLは値じゃない id 顧客名 取引額 年齢 性別 1 福沢諭吉 10000 56 男 2 慶応義塾大学 10000 null null 3 樋口一葉 5000 20 女 4 野口英世 1000 41 男 5 野口英世記念館 1000 null null
  29. 29. NULLは値じゃない id 顧客名 取引額 年齢 性別 1 福沢諭吉 10000 56 男 2 慶応義塾大学 10000 3 樋口一葉 5000 20 女 4 野口英世 1000 41 男 5 野口英世記念館 1000 枠自体がない
  30. 30. NULLは値じゃない 外部結合をしたと きも構造は一緒
  31. 31. NULLは値じゃない 値がないという 「状態」
  32. 32. NULLは値じゃない 「状態」と「値」 は 演算できない
  33. 33. NULLは値じゃない だから a = NULL は使えない
  34. 34. NULLは値じゃない 「状態」は 「値」ではないか ら
  35. 35. NULLは値じゃない INDEXの対象にも ならない
  36. 36. UNKNOWN UNKNOWN
  37. 37. UNKNOWN Boolean型の値 UNKNOWNが追加 されました
  38. 38. UNKNOWN NULL: 値ではな い UNKNOWN: 値
  39. 39. UNKNOWN NULLで演算を すると発生します
  40. 40. UNKNOWN MySQLも Postgresも Oracleも未対応
  41. 41. UNKNOWN NULLを 代用しています
  42. 42. UNKNOWN ANDとORは NULLの演算が 可能 例外として
  43. 43. UNKNOWN 演算可能な NULLが発生
  44. 44. UNKNOWN これが混乱のもと
  45. 45. UNKNOWN 内部的に NULL⇄UNKNOW N 自動型変換
  46. 46. UNKNOWN 自動型変換には 悩みがつきもの PHPユーザも苦しむ
  47. 47. UNKNOWN NULLの中身が どっちか 考えて使うべし
  48. 48. UNKNOWN そうしないと 思わぬ事故に
  49. 49. UNKNOWN 実際にあった例
  50. 50. UNKNOWN startとendで期間 start < now() AND now() < end としたところ
  51. 51. UNKNOWN end = NULLの 終了日未定が 出てこなかった
  52. 52. UNKNOWN 対策 NOT NULL
  53. 53. 3値理論 3値理論
  54. 54. UNKNOWN 事故はどういうと きに起こるか
  55. 55. UNKNOWN WHEREの条件が UNKNOWNに なってることが多 い さっきの例も
  56. 56. UNKNOWN WHERE age >= 20 AND age < 20 は全員か?
  57. 57. UNKNOWN 年齢不明の人が 入らない
  58. 58. どうして NULLがある か どうしてNULLがあるか
  59. 59. どうしてNULLがあるか UNKNOWNは Boolean以外でも ありえる
  60. 60. どうしてNULLがあるか データを実世界の データを扱うため に 不明は必要
  61. 61. どうしてNULLがあるか UNKNOWNだけ で 十分では?
  62. 62. どうしてNULLがあるか 足りない
  63. 63. どうしてNULLがあるか 1つのテーブルに 複数のデータタイ プを入れるため
  64. 64. NULLは値じゃない id 顧客名 取引額 年齢 性別 1 福沢諭吉 10000 56 男 2 慶応義塾大学 10000 3 樋口一葉 5000 20 女 4 野口英世 1000 41 男 5 野口英世記念館 1000 法人も個人も同じ テーブルで管理した い
  65. 65. どうしてNULLがあるか UNIONした結果 を テーブル自体に
  66. 66. どうしてNULLがあるか OOPの継承を連 想
  67. 67. どうしてNULLがあるか SQLでは容易に カラムを増やした り減らしたりでき ない
  68. 68. どうしてNULLがあるか NULL受け入れる ことで多態性を 用意している
  69. 69. NULLと 上手につきあ う UNKNOWNについて
  70. 70. NULLと上手につきあう 1.NULLは値では ないと意識する
  71. 71. NULLと上手につきあう 2. WHEREの条件 は2値理論に丸め 込む
  72. 72. NULLと上手につきあう 3. 出来る限り not nullとdefault の設定をする
  73. 73. NULLと上手につきあう 4. NULL可の カラムは副次的な 情報に制限する
  74. 74. NULLと上手につきあう 5. 困ったら COALESCEを使 う

×