Suche senden
Hochladen
Json型の使い方
•
1 gefällt mir
•
2,969 views
tsudaa
Folgen
JSON型と正規形の両立について検討してみました。
Weniger lesen
Mehr lesen
Technologie
Melden
Teilen
Melden
Teilen
1 von 21
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
Masatoshi Tada
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
Yoshitaka Kawashima
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
NTT DATA Technology & Innovation
Marp Tutorial
Marp Tutorial
Rui Watanabe
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのこと
Amazon Web Services Japan
Empfohlen
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
Masatoshi Tada
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
Yoshitaka Kawashima
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
NTT DATA Technology & Innovation
Marp Tutorial
Marp Tutorial
Rui Watanabe
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのこと
Amazon Web Services Japan
がっつりMongoDB事例紹介
がっつりMongoDB事例紹介
Tetsutaro Watanabe
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
増田 亨
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
Tetsutaro Watanabe
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
増田 亨
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話
Yoshitaka Kawashima
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
Guide To AGPL
Guide To AGPL
Mikiya Okuno
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方
Yoshiyasu SAEKI
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
shinjiigarashi
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
Yahoo!デベロッパーネットワーク
SolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみよう
Shinsuke Sugaya
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Masahito Zembutsu
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
増田 亨
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計
増田 亨
CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善
CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善
Ito Takayuki
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Y Watanabe
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
Airflowで真面目にjob管理
Airflowで真面目にjob管理
msssgur
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
NTT DATA OSS Professional Services
サーバーサイド Kotlin のテストフレームワーク事情
サーバーサイド Kotlin のテストフレームワーク事情
Shinya Mochida
ぬぎんくす問題
ぬぎんくす問題
tsudaa
Windows でも時刻合わせがしたい!
Windows でも時刻合わせがしたい!
tsudaa
Weitere ähnliche Inhalte
Was ist angesagt?
がっつりMongoDB事例紹介
がっつりMongoDB事例紹介
Tetsutaro Watanabe
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
増田 亨
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
Tetsutaro Watanabe
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
増田 亨
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話
Yoshitaka Kawashima
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
Guide To AGPL
Guide To AGPL
Mikiya Okuno
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方
Yoshiyasu SAEKI
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
shinjiigarashi
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
Yahoo!デベロッパーネットワーク
SolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみよう
Shinsuke Sugaya
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Masahito Zembutsu
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
増田 亨
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計
増田 亨
CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善
CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善
Ito Takayuki
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Y Watanabe
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
Airflowで真面目にjob管理
Airflowで真面目にjob管理
msssgur
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
NTT DATA OSS Professional Services
サーバーサイド Kotlin のテストフレームワーク事情
サーバーサイド Kotlin のテストフレームワーク事情
Shinya Mochida
Was ist angesagt?
(20)
がっつりMongoDB事例紹介
がっつりMongoDB事例紹介
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Guide To AGPL
Guide To AGPL
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
SolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみよう
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計
CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善
CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
Airflowで真面目にjob管理
Airflowで真面目にjob管理
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
サーバーサイド Kotlin のテストフレームワーク事情
サーバーサイド Kotlin のテストフレームワーク事情
Mehr von tsudaa
ぬぎんくす問題
ぬぎんくす問題
tsudaa
Windows でも時刻合わせがしたい!
Windows でも時刻合わせがしたい!
tsudaa
Python と私の事情
Python と私の事情
tsudaa
真理とは何か
真理とは何か
tsudaa
Excelのどうでもよいtipsの紹介
Excelのどうでもよいtipsの紹介
tsudaa
MySQL のユーザー定義変数と RDB のココロ
MySQL のユーザー定義変数と RDB のココロ
tsudaa
HiroshimaJUG の「Java8 Lambda ハンズオン with すごい広島」を5分で振り返る
HiroshimaJUG の「Java8 Lambda ハンズオン with すごい広島」を5分で振り返る
tsudaa
ドメイン名の話 (データベース/SQL)
ドメイン名の話 (データベース/SQL)
tsudaa
スターマークの話
スターマークの話
tsudaa
Powershell のセキュリティ (大都会ver)
Powershell のセキュリティ (大都会ver)
tsudaa
昼の12時は午○何時?
昼の12時は午○何時?
tsudaa
PowerShell 紹介
PowerShell 紹介
tsudaa
全角チルダ問題
全角チルダ問題
tsudaa
資格は役に立つか
資格は役に立つか
tsudaa
○○型言語と呼ばれるために備えるべき最低限の条件についての検討
○○型言語と呼ばれるために備えるべき最低限の条件についての検討
tsudaa
文字数はおいくら?(Ruby版)
文字数はおいくら?(Ruby版)
tsudaa
法律の読み方とか
法律の読み方とか
tsudaa
C++入門?
C++入門?
tsudaa
Mehr von tsudaa
(18)
ぬぎんくす問題
ぬぎんくす問題
Windows でも時刻合わせがしたい!
Windows でも時刻合わせがしたい!
Python と私の事情
Python と私の事情
真理とは何か
真理とは何か
Excelのどうでもよいtipsの紹介
Excelのどうでもよいtipsの紹介
MySQL のユーザー定義変数と RDB のココロ
MySQL のユーザー定義変数と RDB のココロ
HiroshimaJUG の「Java8 Lambda ハンズオン with すごい広島」を5分で振り返る
HiroshimaJUG の「Java8 Lambda ハンズオン with すごい広島」を5分で振り返る
ドメイン名の話 (データベース/SQL)
ドメイン名の話 (データベース/SQL)
スターマークの話
スターマークの話
Powershell のセキュリティ (大都会ver)
Powershell のセキュリティ (大都会ver)
昼の12時は午○何時?
昼の12時は午○何時?
PowerShell 紹介
PowerShell 紹介
全角チルダ問題
全角チルダ問題
資格は役に立つか
資格は役に立つか
○○型言語と呼ばれるために備えるべき最低限の条件についての検討
○○型言語と呼ばれるために備えるべき最低限の条件についての検討
文字数はおいくら?(Ruby版)
文字数はおいくら?(Ruby版)
法律の読み方とか
法律の読み方とか
C++入門?
C++入門?
Kürzlich hochgeladen
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
atsushi061452
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
Toru Tamaki
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
CRI Japan, Inc.
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
CRI Japan, Inc.
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
WSO2
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
Toru Tamaki
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NTT DATA Technology & Innovation
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Hiroshi Tomioka
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
sn679259
Kürzlich hochgeladen
(12)
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
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.
もし「もっと良い基準があるよ!」って人がいたら。 • ぜひ教えてください!
Jetzt herunterladen