Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
第2回 ITパスポート社内勉強会 データベース
Search
PharmaX(旧YOJO Technologies)開発チーム
December 13, 2021
Technology
0
480
第2回 ITパスポート社内勉強会 データベース
第2回 ITパスポート勉強会の資料です。
【コーポレートサイト】
https://yojo.co.jp/
【採用情報】
https://herp.careers/v1/yojo
PharmaX(旧YOJO Technologies)開発チーム
December 13, 2021
Tweet
Share
More Decks by PharmaX(旧YOJO Technologies)開発チーム
See All by PharmaX(旧YOJO Technologies)開発チーム
AIコーディングを前提にした開発プロセス再設計〜開発生産性向上に向けた試行錯誤〜
pharma_x_tech
3
130
AIエージェントの評価・改善サイクル
pharma_x_tech
2
340
MCP & Computer Useをフル活用した社内効率化事例〜現在地と将来の展望
pharma_x_tech
1
280
AIエージェントの継続的改善のためオブザーバビリティ
pharma_x_tech
6
2k
Roo CodeとClaude Code比較してみた
pharma_x_tech
3
1.8k
Roo Codeにすべてを委ねるためのルール運用
pharma_x_tech
1
770
Cline&CursorによるAIコーディング徹底活用―Live Vibe Coding付き
pharma_x_tech
3
1.9k
Computer Use〜OpenAIとAnthropicの比較と将来の展望〜
pharma_x_tech
6
1.2k
AIコーディングの最前線 〜活用のコツと課題〜
pharma_x_tech
4
3.5k
Other Decks in Technology
See All in Technology
Segment Anything Modelの最新動向:SAM2とその発展系
tenten0727
0
910
生成AIによるデータサイエンスの変革
taka_aki
0
3k
Amazon Qで2Dゲームを作成してみた
siromi
0
160
僕たちが「開発しやすさ」を求め 模索し続けたアーキテクチャ #アーキテクチャ勉強会_findy
bengo4com
0
2.5k
いかにして命令の入れ替わりについて心配するのをやめ、メモリモデルを愛するようになったか(改)
nullpo_head
7
2.7k
ロールが細分化された組織でSREと協働するインフラエンジニアは何をするか? / SRE Lounge #18
kossykinto
0
230
Delegate authentication and a lot more to Keycloak with OpenID Connect
ahus1
0
240
文字列の並び順 / String Collation
tmtms
1
100
形式手法特論:位相空間としての並行プログラミング #kernelvm / Kernel VM Study Tokyo 18th
ytaka23
3
1.5k
AIエージェントを現場で使う / 2025.08.07 著者陣に聞く!現場で活用するためのAIエージェント実践入門(Findyランチセッション)
smiyawaki0820
7
1.2k
Infrastructure as Prompt実装記 〜Bedrock AgentCoreで作る自然言語インフラエージェント〜
yusukeshimizu
1
150
九州の人に知ってもらいたいGISスポット / gis spot in kyushu 2025
sakaik
0
180
Featured
See All Featured
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
6k
Why Our Code Smells
bkeepers
PRO
338
57k
A better future with KSS
kneath
239
17k
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.8k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.3k
It's Worth the Effort
3n
186
28k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
1k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
Automating Front-end Workflow
addyosmani
1370
200k
Embracing the Ebb and Flow
colly
86
4.8k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3k
Transcript
ITパスポート勉強会 ~データベース~
勉強会の予定 ・第1回 デジタルデータ 12/ 6 ・第2回 データベース 12/13 ・第3回 ネットワーク
12/20 ・第4回 セキュリティ 12/27 目次 ・毎週月曜日全4回
今日の予定 目次 • RDB • 主キーと外部キー • 論理演算 • 排他制御・トランザクション
データベース
これらは全部データベースにやってもらいます! データベースとは? 複数のデータを一括管理・保存する場所です! 顧客の住所 診断に出てくる漢方 顧客の支払方法 データを追加・削除したい! こういう条件のデータが見たい! データの一部を変更したい! 複数のデータを一括管理・保存する場所です!
私がやりましょう(キリッ データベース
表から関係性が読み取れますね! RDB(リレーショナルデータベース) 複数の「表」と、その「関係性」によって構成されるDB 顧客の住所 顧客の支払方法 顧客 この表を見ると住所と支払い方法はどの顧客のものなのかわかるように顧客IDを持っています。 ID 名前 電話番号
1 山田太郎 09000001111 2 田中一郎 09022221111 3 佐藤花子 09012345678 ID 顧客ID 住所 番地 郵便番号 1 2 東京都ああ区いい街 11-1 1111111 2 1 東京都いい区うう街 1-23-2 1232221 3 3 東京都ええ区おお街 1-33 4441115 ID 顧客ID 支払い方法 1 2 クレカ 2 1 クレカ 3 3 代引き 顧客は住所、支払い方法を持っていることがわかります。 データベース
これは正規化と呼ばれます 支払い方法の表現が一貫されていない そんなときは表を分けましょう! この表はどうでしょう? ID 顧客ID 支払い方法 1 2 クレカ
2 1 クレカ 3 3 代引き 4 6 クレジット 5 9 クレジットカード 6 5 クレカ 7 12 代金引換 検索しづらく、修正漏れしやすくなります、、、 ID 顧客ID 支払い方法ID 1 2 1 2 1 1 3 3 2 4 6 1 5 9 1 6 5 1 7 12 2 ID 支払い方法 1 クレジットカード 2 代引き これなら代引きを「代金引換」に変える場合でも 修正箇所は1つで済みますね! データベース
データベース 実際にデータを見るときはデータをくっつけたり、 抽出したりします! 顧客の支払方法 ID 顧客ID 支払い方法ID 1 2 1
2 1 1 3 3 2 4 6 1 5 9 1 6 5 1 7 12 2 ID 支払い方法 1 クレジットカード 2 代引き この状態だとデータの整合性や一貫性を保つこと ができますが、ちょっと見づらいですね... 支払方法 選択 (必要な行を抽出) ID 顧客ID 支払い方法ID 3 3 2 7 12 2 代引きの人だけ抽出 射影 (必要な列を抽出) 支払方法だけ抽出 結合 (関連の表を結合) ID 顧客ID 支払い方法ID 支払方法 3 3 2 代引き 6 5 1 クレジットカード ID 支払い方法 ID 1 1 2 1 3 2 4 1 5 1 6 1 7 2 支払方法の表を右に結合 見るとき用の一時的な表(ビュー)を作ります!
データベース 問1 問2 A. ウ フィールドとは表の中の項目のこと(IDや支払方法など) で、関連性からデータの一貫性や整合性を考え、フィール ドを整理する作業は正規化と呼ばれます。 この中で本質的に重複しているのは生年月日と年 齢です。
生年月日から年齢を知ることはできますが、年齢 から生年月日を知ることはできないため、今回は 年齢の方が削除可能です。 A. イ ちなみにYOJOではユーザーの中に年齢の項目があり、生年月日は元々 なかったため、入力したときの年齢のまま永遠に変わりません笑
データベース 顧客の住所 顧客 ID 名前 電話番号 1 山田太郎 09000001111 2
田中一郎 09022221111 3 佐藤花子 09012345678 ID 顧客ID 住所 番地 郵便番号 1 2 東京都ああ区いい街 11-1 1111111 2 1 東京都いい区うう街 1-23-2 1232221 3 3 東京都ええ区おお街 1-33 4441115 これらの表において… 名前や電話番号は同じデータが複数作成される可能性があります。 このように、行を特定できる項目を主キーといいます! しかし、顧客IDが1のデータは1つしかありません また、関連する表の主キーを持っている項目を 外部キーといいます! 主キー 主キー 外部キー
データベース 配送 こういうデータがあったとき、複数条件でデータを 絞り込みたいことがあります。 こういうときは論理演算をします! ex) 昨日の配送のうち、まだ配送中のものを知りたい 両方の条件を満たす! ID 状態
配送先ID 作成日 1 未発送 3 2021/12/13 2 配送中 2 2021/12/12 3 完了 1 2021/12/12 4 配達中 4 2021/12/11 5 完了 5 2020/1/2 6 完了 7 2019/9/30 7 完了 6 2019/7/1 AND(論理積) 条件1 条件2 OR(論理和) 条件1 条件2 どちらか1つでも 条件を満たす! 今回の例だと (作成日が昨日) AND (状態が配送中) ですね!
データベース 問1 問2 A. イ 上の図を言い換えると、BまたはCの部分かつAではな い部分なので、(Aではない)かつ(BまたはC)にな ります! 積集合はANDのことなので、表Aと表Bの共通部分 であるせんべいとチョコレートになっているはず
です! A. エ
データベース ID 商品名 在庫 1 漢方A 3 2 漢方B 2
3 漢方C 4 商品 データベースはデータを一括で管理していますが、同 時に操作されると不整合を起こす可能性があります。 漢方Bが2人に売れたとします。 例えば、、、 それぞれの担当者2人が同時に漢方Bの在庫を確認し、 売れた分在庫を1引くと? 担当者A 担当者B 在庫は2か、、 在庫は2か、、 1つ引いて 1に更新! 1つ引いて 1に更新! 2つ売れたのに在庫が1つある ことになってしまいます…
データベース どうすれば防げるでしょうか? このように、処理中に他の人からのアクセスをロックすること を排他制御といいます! 他 の 人 更 新 禁
止 ! 共有ロック 担当者B 在庫は2か、、 在庫は1か、、 1つ引いて 1に更新! 1つ引いて 0に更新! 今回だと、 ↓ こういう流れになればいいですね! 担当者A 誰かが編集中だ! 更新を待とう! データを見ることはできますが、 更新することはできません! 占有ロック データを見ることも、更新する こともできません! 在庫は常に見れた方が良いので 共有ロックがいいですね!
データベース 問1 問2 A. ウ 同時アクセスによるデータ不整合の防止に役立つのが 排他制御です。 ③の更新前に②の読み取りがされているため、② で読み取ったのは初期値の10になります。よって ④で書き込まれるのは17です!
A. エ
データベース YOJOでは購入時、 もし、この処理が②と③の間で止まってしまったらどうでしょうか? お金を払ったのに何も届かなかったら大問題ですね! ↓ こんな感じで処理が進みます! ①クレカの決済処理 ②注文を完了状態にする ③支払いを完了状態にする ④配送を準備状態にする
お金が支払われ、注文も完了したことになっているのに、支払われたことに なっておらず、配送も作られません。
データベース ではどうすればいいか? このようにどれか1つでも失敗すると不整合が起きる 1連の処理単位をトランザクションと呼びます! ①クレカの決済処理 ②注文を完了状態にする ③支払いを完了状態にする ④配送を準備状態にする ①~④までは一連の処理なので、どこかでエラーが発生したらそれまでの処理 もなかったことにしたいですね!
ex) ②~③で処理が止まったら、①、②の処理が成功していても、実行前の データ状態に巻き戻す必要があります! これはロールバックと呼ばれます
データベース 問1 問2 A. エ 関連する1連の処理単位がトランザクションです。 Bは更新履歴と書いてあるのでログファイルが正しいで す。バックアップファイルにはデータそのもののコ ピーが入っています。 A.
エ 4の処理が失敗した場合(3まで成功)のみ、AとBが 残った状態になります!
データベース 次回予告 ネットワーク LANとWAN プロトコル ネットワークの構成 12/20 21時からやります! keywords