Skip to main content
Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Uploaded by
tsudaa
PDF, PPTX
3,069 views
Json型の使い方
JSON型と正規形の両立について検討してみました。
Technology
◦
Read more
More Related Content
PDF
ソーシャルゲーム案件におけるDB分割のPHP実装
by
infinite_loop
51 slides
52.6K views
PDF
ソーシャルゲームのためのデータベース設計
by
Yoshinori Matsunobu
33 slides
129.9K views
PDF
世界でいちばんわかりやすいドメイン駆動設計
by
増田 亨
44 slides
15.5K views
PDF
なかったらINSERTしたいし、あるならロック取りたいやん?
by
ichirin2501
19 slides
43.4K views
PDF
デキるプログラマだけが知っているコードレビュー7つの秘訣
by
Masahiro Nishimi
41 slides
165.3K views
PDF
ドメイン駆動設計サンプルコードの徹底解説
by
増田 亨
41 slides
22.2K views
PDF
【2000行弱!】x86用自作カーネルの紹介
by
Yuma Ohgami
286 slides
8.5K views
PDF
その ionice、ほんとに効いてますか?
by
Narimichi Takamura
24 slides
93.8K views
ソーシャルゲーム案件におけるDB分割のPHP実装
by
infinite_loop
51 slides
52.6K views
ソーシャルゲームのためのデータベース設計
by
Yoshinori Matsunobu
33 slides
129.9K views
世界でいちばんわかりやすいドメイン駆動設計
by
増田 亨
44 slides
15.5K views
なかったらINSERTしたいし、あるならロック取りたいやん?
by
ichirin2501
19 slides
43.4K views
デキるプログラマだけが知っているコードレビュー7つの秘訣
by
Masahiro Nishimi
41 slides
165.3K views
ドメイン駆動設計サンプルコードの徹底解説
by
増田 亨
41 slides
22.2K views
【2000行弱!】x86用自作カーネルの紹介
by
Yuma Ohgami
286 slides
8.5K views
その ionice、ほんとに効いてますか?
by
Narimichi Takamura
24 slides
93.8K views
What's hot
PDF
ドメインオブジェクトの見つけ方・作り方・育て方
by
増田 亨
95 slides
32.7K views
PDF
C#でわかる こわくないMonad
by
Kouji Matsui
78 slides
24.3K views
PDF
ドメイン駆動設計のためのオブジェクト指向入門
by
増田 亨
89 slides
49.3K views
PDF
ドメインオブジェクトの設計ガイドライン
by
増田 亨
10 slides
3.9K views
ODP
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
by
pospome
119 slides
68.5K views
PDF
オブジェクト指向できていますか?
by
Moriharu Ohzu
129 slides
243.1K views
PDF
オブジェクト指向プログラミングのためのモデリング入門
by
増田 亨
47 slides
39.2K views
PPTX
HashMapとは?
by
Trash Briefing ,Ltd
13 slides
3.5K views
PPTX
モデル検査入門 #wacate
by
Kinji Akemine
56 slides
16.7K views
PDF
3週連続DDDその3 ドメイン駆動設計 戦略的設計
by
増田 亨
89 slides
15.1K views
PPTX
分散システムについて語らせてくれ
by
Kumazaki Hiroki
45 slides
130.7K views
PDF
描ける!ER図
by
Masahiro NAKAYAMA
21 slides
8.1K views
PDF
競技プログラミングにおけるコードの書き方とその利便性
by
Hibiki Yamashiro
29 slides
18.6K views
PDF
プログラムを高速化する話
by
京大 マイコンクラブ
120 slides
268.3K views
PDF
ARM CPUにおけるSIMDを用いた高速計算入門
by
Fixstars Corporation
114 slides
10.9K views
PDF
ネットワーク ゲームにおけるTCPとUDPの使い分け
by
モノビット エンジン
63 slides
65.1K views
PDF
Python におけるドメイン駆動設計(戦術面)の勘どころ
by
Junya Hayashi
33 slides
18K views
PDF
組み合わせテストの設計(PictMaster勉強会) 2008年7月17日
by
Keizo Tatsumi
39 slides
4.7K views
PDF
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021
by
Kouhei Sutou
42 slides
893 views
PPTX
トランザクション入門
by
Kumazaki Hiroki
29 slides
11.2K views
ドメインオブジェクトの見つけ方・作り方・育て方
by
増田 亨
95 slides
32.7K views
C#でわかる こわくないMonad
by
Kouji Matsui
78 slides
24.3K views
ドメイン駆動設計のためのオブジェクト指向入門
by
増田 亨
89 slides
49.3K views
ドメインオブジェクトの設計ガイドライン
by
増田 亨
10 slides
3.9K views
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
by
pospome
119 slides
68.5K views
オブジェクト指向できていますか?
by
Moriharu Ohzu
129 slides
243.1K views
オブジェクト指向プログラミングのためのモデリング入門
by
増田 亨
47 slides
39.2K views
HashMapとは?
by
Trash Briefing ,Ltd
13 slides
3.5K views
モデル検査入門 #wacate
by
Kinji Akemine
56 slides
16.7K views
3週連続DDDその3 ドメイン駆動設計 戦略的設計
by
増田 亨
89 slides
15.1K views
分散システムについて語らせてくれ
by
Kumazaki Hiroki
45 slides
130.7K views
描ける!ER図
by
Masahiro NAKAYAMA
21 slides
8.1K views
競技プログラミングにおけるコードの書き方とその利便性
by
Hibiki Yamashiro
29 slides
18.6K views
プログラムを高速化する話
by
京大 マイコンクラブ
120 slides
268.3K views
ARM CPUにおけるSIMDを用いた高速計算入門
by
Fixstars Corporation
114 slides
10.9K views
ネットワーク ゲームにおけるTCPとUDPの使い分け
by
モノビット エンジン
63 slides
65.1K views
Python におけるドメイン駆動設計(戦術面)の勘どころ
by
Junya Hayashi
33 slides
18K views
組み合わせテストの設計(PictMaster勉強会) 2008年7月17日
by
Keizo Tatsumi
39 slides
4.7K views
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021
by
Kouhei Sutou
42 slides
893 views
トランザクション入門
by
Kumazaki Hiroki
29 slides
11.2K views
Similar to Json型の使い方
PDF
MyNA JPUG study 20160220-postgresql-json-datatype
by
Toshi Harada
88 slides
2.6K views
PDF
Nippondanji氏に怒られても仕方ない、配列型とJSON型の使い方
by
kwatch
20 slides
5.2K views
PDF
PGCon.jp 2014 jsonb-datatype-20141205
by
Toshi Harada
126 slides
4.7K views
PDF
Jpug study-jsonb-datatype-20141011
by
Toshi Harada
90 slides
2.8K views
PDF
JSONB型でpostgresをNoSQLっぽく使う
by
Yuki Takeichi
26 slides
2K views
PDF
Chugokudb study-20150131
by
Toshi Harada
133 slides
2.1K views
PDF
Osc2015 hokkaido postgresql-semi-stuructured-datatype
by
Toshi Harada
161 slides
2.5K views
PDF
20170714_MySQLドキュメントストア JSONデータ型&JSON関数 by 日本オラクル株式会社 MySQL GBU 山﨑由章
by
Insight Technology, Inc.
61 slides
1.4K views
PPTX
第51回NDS PostgreSQLのデータ型 #nds51
by
civicpg
57 slides
4.5K views
PDF
pg_bigmを触り始めた人に伝えたいこと
by
Masahiko Sawada
26 slides
1.3K views
PDF
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
by
Satoshi Nagayasu
56 slides
2.3K views
PDF
JSONBはPostgreSQL9.5でいかに改善されたのか
by
NTT DATA OSS Professional Services
39 slides
9.7K views
PDF
Lt ingaoho-jsonb+postgeres fdw
by
Toshi Harada
29 slides
1.3K views
PDF
Postgre sql9.3新機能紹介
by
Daichi Egawa
64 slides
12.3K views
PDF
あなたが知らない リレーショナルモデル
by
Mikiya Okuno
68 slides
31.8K views
MyNA JPUG study 20160220-postgresql-json-datatype
by
Toshi Harada
88 slides
2.6K views
Nippondanji氏に怒られても仕方ない、配列型とJSON型の使い方
by
kwatch
20 slides
5.2K views
PGCon.jp 2014 jsonb-datatype-20141205
by
Toshi Harada
126 slides
4.7K views
Jpug study-jsonb-datatype-20141011
by
Toshi Harada
90 slides
2.8K views
JSONB型でpostgresをNoSQLっぽく使う
by
Yuki Takeichi
26 slides
2K views
Chugokudb study-20150131
by
Toshi Harada
133 slides
2.1K views
Osc2015 hokkaido postgresql-semi-stuructured-datatype
by
Toshi Harada
161 slides
2.5K views
20170714_MySQLドキュメントストア JSONデータ型&JSON関数 by 日本オラクル株式会社 MySQL GBU 山﨑由章
by
Insight Technology, Inc.
61 slides
1.4K views
第51回NDS PostgreSQLのデータ型 #nds51
by
civicpg
57 slides
4.5K views
pg_bigmを触り始めた人に伝えたいこと
by
Masahiko Sawada
26 slides
1.3K views
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
by
Satoshi Nagayasu
56 slides
2.3K views
JSONBはPostgreSQL9.5でいかに改善されたのか
by
NTT DATA OSS Professional Services
39 slides
9.7K views
Lt ingaoho-jsonb+postgeres fdw
by
Toshi Harada
29 slides
1.3K views
Postgre sql9.3新機能紹介
by
Daichi Egawa
64 slides
12.3K views
あなたが知らない リレーショナルモデル
by
Mikiya Okuno
68 slides
31.8K views
More from tsudaa
PDF
ぬぎんくす問題
by
tsudaa
20 slides
2K views
PDF
Windows でも時刻合わせがしたい!
by
tsudaa
28 slides
1.6K views
PDF
Python と私の事情
by
tsudaa
21 slides
4.7K views
PDF
真理とは何か
by
tsudaa
25 slides
1.4K views
PDF
Excelのどうでもよいtipsの紹介
by
tsudaa
45 slides
2K views
PDF
MySQL のユーザー定義変数と RDB のココロ
by
tsudaa
34 slides
2.4K views
PDF
HiroshimaJUG の「Java8 Lambda ハンズオン with すごい広島」を5分で振り返る
by
tsudaa
26 slides
1.1K views
PDF
ドメイン名の話 (データベース/SQL)
by
tsudaa
12 slides
4.9K views
PDF
スターマークの話
by
tsudaa
14 slides
1.4K views
PDF
Powershell のセキュリティ (大都会ver)
by
tsudaa
49 slides
1.1K views
PDF
昼の12時は午○何時?
by
tsudaa
13 slides
872 views
PDF
PowerShell 紹介
by
tsudaa
31 slides
2.2K views
PDF
全角チルダ問題
by
tsudaa
33 slides
104.7K views
PPTX
資格は役に立つか
by
tsudaa
21 slides
4K views
PDF
○○型言語と呼ばれるために備えるべき最低限の条件についての検討
by
tsudaa
27 slides
1.1K views
PDF
文字数はおいくら?(Ruby版)
by
tsudaa
13 slides
877 views
PDF
法律の読み方とか
by
tsudaa
21 slides
911 views
PDF
C++入門?
by
tsudaa
32 slides
3.6K views
ぬぎんくす問題
by
tsudaa
20 slides
2K views
Windows でも時刻合わせがしたい!
by
tsudaa
28 slides
1.6K views
Python と私の事情
by
tsudaa
21 slides
4.7K views
真理とは何か
by
tsudaa
25 slides
1.4K views
Excelのどうでもよいtipsの紹介
by
tsudaa
45 slides
2K views
MySQL のユーザー定義変数と RDB のココロ
by
tsudaa
34 slides
2.4K views
HiroshimaJUG の「Java8 Lambda ハンズオン with すごい広島」を5分で振り返る
by
tsudaa
26 slides
1.1K views
ドメイン名の話 (データベース/SQL)
by
tsudaa
12 slides
4.9K views
スターマークの話
by
tsudaa
14 slides
1.4K views
Powershell のセキュリティ (大都会ver)
by
tsudaa
49 slides
1.1K views
昼の12時は午○何時?
by
tsudaa
13 slides
872 views
PowerShell 紹介
by
tsudaa
31 slides
2.2K views
全角チルダ問題
by
tsudaa
33 slides
104.7K views
資格は役に立つか
by
tsudaa
21 slides
4K views
○○型言語と呼ばれるために備えるべき最低限の条件についての検討
by
tsudaa
27 slides
1.1K views
文字数はおいくら?(Ruby版)
by
tsudaa
13 slides
877 views
法律の読み方とか
by
tsudaa
21 slides
911 views
C++入門?
by
tsudaa
32 slides
3.6K views
Json型の使い方
1.
JSON型の使い方 (SQLアンチパターンを超えて) @tsuda_ahr 2016/7/2
2.
ジェイ・ウォーク (信号無視) • 略 •
「SQLアンチパターン (オライリー刊)」 を 読んでください。
3.
そんなとき、PostgreSQLer (?) からは •
ポスグレなら、配列型があるよ! • ポスグレなら、JSON 型があるよ! という話を聞くのですが。
4.
それって、第一正規形違反じゃね? • カラムに非スカラ値を持つので、第一正規形違反。 • 要するに正規化の第一歩目からつまづいてる。
5.
ところで第一正規形とは? • テーブルが繰り返しグループを持たない。 • 配列、リスト、テーブル内テーブル、レコード構造を持たない。 •
すべての列がスカラ値である。 (スカラ値とは、それ以上分解不可能な原子的な値のこと)
6.
つまり • 配列型やJSON型を使う時点で、非正規形に堕ちる。 • リレーショナルな設計はどこへ? •
配列型やJSON型を使うことは、リレーショナルモデルが解決しようとしたものを壊すのでは?
7.
正規化の目的を確認 • 正規形とは、データベースにおいて正しいデータを破壊しないこと、または間違ったデー タを作らないことを保証するための試みである。 そうしたエラーを回避するための方法の 1つは、データベースにおいて1つの事実を1つ の場所にだけ格納することだ。 •
というのも、もし1つの事実が2つの場所に現れるとしたら、更新の際に正しく同期を取 らないと不整合が起きることになる • 2つの腕時計をしている人間は、どちらが正しい時刻を指しているのかという不安に常 につきまとわれる。だから我々は、多くの時計を1つのマスタとなる時計に同期させ、1 つのデータソースから派生するビューとして扱うのだ。 「プログラマのためのSQL 第4版 (翔泳社刊)」 の 9章「正規化」より引用
8.
なので今回は • 配列型やJSON型を、リレーショナルモデルに反しないように使うためにはどうすればよい か?を考えてみる。
9.
ところで、落ち着いて考えてみると • 標準SQL (SQL92以前)
でも認められている非スカラ値がある。
10.
CHAR や VARCHAR,
あるいは TEXT • 非スカラ値 (配列値相当) なのに、スカラ値 (単一値) 扱い。 • 文字列は最近の言語では string ですが、C では char[] ですし、 Haskell とかも文字の集合 (list) として扱ったりしますね?
11.
あるいは LOB (Large
Object) • ファイルや画像。これも Byte 配列。 • SQL 標準としては、配列型が認められた SQL99 からの型だが、 配列型や JSON 型のように、正規化の問題として語られることはない。
12.
配列型やJSON型と、文字列型,LOB型の違いはなにか • 一つの値として取得しているところ。
13.
たとえば、 • 一般に、文字列の一部だけを (DBで)
検索することはない。
14.
いやまあ、できますよ?確かに。 • select ENAME
from EMP where substr(ENAME,2,1) = 'A'; • select ENAME from EMP where regexp_like(ENAME, 'L.*K', 'i') ; (↑oracle の場合) でも、こんなことすると遅いし! ポスグレには 「関数インデックス」 という機能があるから速くできるよ!
15.
でも普通やらないよね? • つまり、配列だろうとなんだろうと、その集合を「ひとつの値」としてみなせる場合は、 第一正規形に違反していない、といえる。
16.
「ひとつの値」としてみなせる場合、とはどんな場合か? • 例えば、会社から自宅までの経路測定のデータ列。 • 例えば、将棋盤のコマの配置状況。
17.
ダメな場合 (「ひとつの値」としてみなせない場合) • 要素の一部と、他のテーブルを結合したい
(外部キー制約) を張りたい場合 • 要素の一部分を検索,更新したい場合
18.
厳密な境界線はあるのか? • ない • バランスを失うと、ジェイウォークにもあるように、「文字列型」に複数の要素を突っこむの と同じことが起こり得る。 •
これはデータベースの型がスカラ値か非スカラかという問題ではなく、値の設計の問題。 整数型であっても、例えば桁に意味を持たせるようなことをすれば同じ問題が生ずる。
19.
配列型やJSON型を使うための基準 • データ型は非スカラ値でも、それをスカラ値のような扱える場合はアリ。 • 部分のデータを、他のテーブルのデータと関連を持たせるような設計は不可。 •
文字列型を参考すると解が見えやすい。(バランスがとりやすい)
20.
結論 • ご利用は計画的に。
21.
もし「もっと良い基準があるよ!」って人がいたら。 • ぜひ教えてください!