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
実践データベース設計 ①データベース設計概論
Search
Recruit
PRO
August 28, 2025
Technology
2
21
実践データベース設計 ①データベース設計概論
2025年度リクルート エンジニアコース新人研修の講義資料です
Recruit
PRO
August 28, 2025
Tweet
Share
More Decks by Recruit
See All by Recruit
Browser
recruitengineers
PRO
3
32
JavaScript 研修
recruitengineers
PRO
2
29
TypeScript入門
recruitengineers
PRO
2
31
モダンフロントエンド 開発研修
recruitengineers
PRO
2
23
Webアクセシビリティ入門
recruitengineers
PRO
1
14
攻撃と防御で実践するプロダクトセキュリティ演習~導入パート~
recruitengineers
PRO
1
9
モバイルアプリ研修
recruitengineers
PRO
2
76
事業価値と Engineering
recruitengineers
PRO
1
24
制約理論(ToC)入門
recruitengineers
PRO
2
26
Other Decks in Technology
See All in Technology
Preferred Networks (PFN) とLLM Post-Training チームの紹介 / 第4回 関東Kaggler会 スポンサーセッション
pfn
PRO
1
140
生成AI利用プログラミング:誰でもプログラムが書けると 世の中どうなる?/opencampus202508
okana2ki
0
190
AWSの最新サービスでAIエージェント構築に楽しく入門しよう
minorun365
PRO
10
600
ZOZOTOWNフロントエンドにおけるディレクトリの分割戦略
zozotech
PRO
14
4.9k
会社にデータエンジニアがいることでできるようになること
10xinc
9
1.5k
.NET開発者のためのAzureの概要
tomokusaba
0
230
サイボウズフロントエンドの横断活動から考える AI時代にできること
mugi_uno
4
1.4k
Yahoo!ニュースにおけるソフトウェア開発
lycorptech_jp
PRO
0
270
Claude Code x Androidアプリ 開発
kgmyshin
1
530
DeNA での思い出 / Memories at DeNA
orgachem
PRO
2
520
Exadata Database Service on Dedicated Infrastructure セキュリティ、ネットワーク、および管理について
oracle4engineer
PRO
1
360
Rethinking Incident Response: Context-Aware AI in Practice - Incident Buddy Edition -
rrreeeyyy
0
130
Featured
See All Featured
The Pragmatic Product Professional
lauravandoore
36
6.8k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
A better future with KSS
kneath
239
17k
Testing 201, or: Great Expectations
jmmastey
45
7.6k
We Have a Design System, Now What?
morganepeng
53
7.7k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
126
53k
Docker and Python
trallard
45
3.5k
Code Review Best Practice
trishagee
70
19k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Transcript
実践データベース設計 ①データベース設計概論 プロジェクト推進部 藤本 毅 2025年7月15日
(C) Recruit Co.,Ltd. All rights reserved. 2 当講座と『実践アプリケーション設計』 の2講座を通しての目標 架空のECサイト「R書店」を題材に、データ
ベースからアプリケーションの設計・実装に 関する広範なナレッジを体系的に整理し、全 体を俯瞰して理解を深めていただく。 また、開発現場で求められる設計や実装のポ イント等を実践的な課題や演習を通して、丁 寧に解説する。
(C) Recruit Co.,Ltd. All rights reserved. 3 講師自己紹介① 【名前】 藤本
毅(フジモト タケシ) 【所属】 プロジェクト推進部 【経歴】 IT企業、常駐型開発会社、スタート アップ支援会社、通信キャリア等を 通してB2BからB2Cまで(官公庁シ ステム、チャットサービス、広告、 音楽、エンタメ、旅行、金融、飲食、 HR等)様々なシステムの開発に携 わる
(C) Recruit Co.,Ltd. All rights reserved. 4 【言語・OS・フレームワーク等】 Mac, Linux(CentOS,
Debian, Ubuntu, Kali, Raspberry Pi ), Windows C#、C、C++、Clojure、Ruby、Python、Ocaml、Haskell、PHP、 Java、Kotolin、Scala、Swift、Objective-C、JavaScript、 CoffeeScript、TypeScript、Go Ruby On Rails、CodeIgniter、Django、Spring、Laravel、 Playframework、sokko、 React、 Backbone.js、Vue.js、Unity、 Metasploit、Nessus、TensorFlow、PyTorch ..etc 講師自己紹介②
(C) Recruit Co.,Ltd. All rights reserved. 5 【直近の活動】 Web(フロントエンド、バックエンド)、インフラ(オンプレミス・クラ ウド)、サイバーセキュリティ、スマートフォン(iOS、Android、
Tyzen)、電子回路・FPGA、機械学習・ディープラーニング、3Dゲー ム開発、OSやネットワーク等の低レイヤー技術等、長年の試作やOSSの 解析、業務経験等を通して得た様々な知見や技術を活かし、それらを統 合する研究を個人でおこなっている 【その他】 総務省異能vationノミネート、大手ベンチャーキャピタルのアクセラ レーションプログラムのファイナリスト..etc 講師自己紹介③
(C) Recruit Co.,Ltd. All rights reserved. 6 本資料の目的 データベースとその仕組みや種類、および データベース設計とそれに関連する主なト
ピックについて概要を解説する。
(C) Recruit Co.,Ltd. All rights reserved. 7 目次 1. はじめに:データベースとは
2. 用語の確認 3. データベース設計の前に必要なこと 4. 本題:データベース設計 5. データモデリング 5-1. 概念データモデリング 5-2. 論理データモデリング 5-3. 物理データモデリング 6. データベースの変更容易性 7. オブジェクト指向とデータベース
(C) Recruit Co.,Ltd. All rights reserved. 8 目次 8. データベース設計における盲点(NULL)
補足:マスタ(M)とトランザクション(T) 9:「イミュータブルデータモデル」 10. 大規模システムにおけるデータベース 11. データベースのアーキテクチャ 12. デーベース設計の実践 13. データベース設計で大事なこと 14. 当講座の推薦図書 15. 当講座の関連リポジトリ
(C) Recruit Co.,Ltd. All rights reserved. 9 1. はじめに:データベースとは
(C) Recruit Co.,Ltd. All rights reserved. 10 データベースの始まり(アドレス帳) データベースの始まりはアドレス帳 名前
電話番号 メールアドレス 住所 ◦山◦男 03-12xx-99xx
[email protected]
東京都港区XXX △田△子 042-x4x-34xx
[email protected]
東京都町田市XXX ×木×太 023-x8-33xx
[email protected]
千葉県千葉市XXX ・ ・ ・ ・ ・ ・ ・ ・ アドレス帳のイメージ
(C) Recruit Co.,Ltd. All rights reserved. 11 データと情報の違いについて データ(Data): 一定の目的に沿って観測したり、収集した数
値や文字列、日付等 情報(Infomation): データに一定の文脈における解釈を加えたも の
(C) Recruit Co.,Ltd. All rights reserved. 12 ①階層型データベース ②リレーショナルデータベース ③オブジェクト指向データベース
④XMLデータベース ⑤NoSQLデータベース 主なデータベースの種類
(C) Recruit Co.,Ltd. All rights reserved. 13 • 階層型データベースは、データを階層的な構造で管理す る。この種類のデータベースは、データ要素が親子関係
を持つツリー構造で表される • 各要素は一つの親要素を持ち、複数の子要素を持つこと ができる • 階層型データベースは、その構造が直感的であるため、 特定のアプリケーション、特にファイルシステムの管理 に適しているが、現代の多くの用途には柔軟性に欠ける とされている ①階層型データベース
(C) Recruit Co.,Ltd. All rights reserved. 14 • リレーショナルデータベースは、表(テーブル)を使用し てデータを格納する。テーブルは行(レコード)と列(属
性)で構成され、SQL(Structured Query Language) という特定の言語を使用してデータを管理する。 • リレーショナルデータベースは汎用性が高く、整合性と耐 久性を保証するための厳格な制約が特徴 • Oracle、MySQL、PostgreSQLなどが有名 • スケーラビリティが課題であったが、近年その部分を強化 した「New SQL」と呼ばれる製品群も登場している ②リレーショナルデータベース
(C) Recruit Co.,Ltd. All rights reserved. 15 • オブジェクト指向データベースは、オブジェクト指向プログ ラミング言語の概念を利用してデータを管理するデータベー
スで、これにより、データをオブジェクトとして保存し、ク ラス、継承、多様性などのオブジェクト指向の機能を直接 データベース管理システム内で使用することができる • このタイプのデータベースは、複雑なデータ構造を持つアプ リケーションに適している • 主な製品にはObjectDBやdb4o、 GemStone/S等がある ③オブジェクト指向データベース
(C) Recruit Co.,Ltd. All rights reserved. 16 • XMLデータベースは、XML形式でデータを格納するため に設計されていることで、階層的なデータとしてのXML
の強みを生かし、柔軟なデータモデリングと自己記述的 なデータ形式が可能になる • XMLデータベースは、Webサービスやインターネット ベースのアプリケーションでの使用が理想的 • 主な製品にBaseXや、eXist-db、Berkeley DB XML等 がある ④XMLデータベース
(C) Recruit Co.,Ltd. All rights reserved. 17 • NoSQLデータベースは、リレーショナルデータベースのス キーマレスな代替品として登場した
• スキーマが固定されていないため、柔軟なデータ構造を扱う ことができ、大規模なデータセットの高速処理に適している • 主なタイプにはドキュメント型(MongoDBなど)、キーバ リューストア(Redisなど)、列指向データベース (Cassandra、Google BigQueryなど)、グラフデータ ベース(Neo4jなど)がる ⑤NoSQLデータベース
(C) Recruit Co.,Ltd. All rights reserved. 18 本講義ではリレーショナルデータベース を前提に設計を解説
(C) Recruit Co.,Ltd. All rights reserved. 19 リレーショナルデータベースはハードディスクで保持する実体としてのバイナリ ファイルとそれを操作・管理するアプリケーションのデータベース管理システム (DBMS)で構成される。なお、DBMSを持たず直接ファイルを操作する
SQLiteやハードディスクではなくメモリ上に構築するインメモリDBもある) 引用元:https://cz-cdn.shoeisha.jp/static/images/article/12216/12216_06.jpg データベースの仕組み(DBMS)
(C) Recruit Co.,Ltd. All rights reserved. 20 2. 用語の確認
(C) Recruit Co.,Ltd. All rights reserved. 21 インスタンス データベースは階層構造になっており、最上位に位置 する概念がインスタンス。
インスタンスはDBMSが動く際の単位で、OSからは 「プロセス」として見える 例: Oracleのインスタンス(プロセス) 引用元:https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS9vWMSi_YkHICZGC0KMM76PJYDLKG9iaBm0g&s
(C) Recruit Co.,Ltd. All rights reserved. 22 スキーマ データベースはインスタンスを最上位に階層(通常4 層構造)に分かれており、そのフォルダ(ディレクト
リ)に該当するのがスキーマ リレーショナルデータベースの階層構造 インスタンス データベース1 データベース2 スキーマI スキーマII スキーマIII テーブルA テーブルB テーブルC テーブルD テーブルE テーブルE
(C) Recruit Co.,Ltd. All rights reserved. 23 注:MySQLのスキーマ MySQLはデータベースとスキーマを「同一」とみな しており(3層構造)、MySQLにおいてはデータ
ベースとスキーマは同義語である MySQLの階層構造 インスタンス スキーマI スキーマII スキーマIII テーブルA テーブルB テーブルC テーブルD テーブルE テーブルE
(C) Recruit Co.,Ltd. All rights reserved. 24 注:Oracleのスキーマ Oracleではデータベースとスキーマは別(4層構 造)であるが、1つのインスタンスの配下に1つしか
データベースを作れないため、実質3層構造 Oracleの階層構造 インスタンス データベース スキーマI スキーマII スキーマIII テーブルA テーブルB テーブルC テーブルD テーブルE テーブルE
(C) Recruit Co.,Ltd. All rights reserved. 25 テーブル テーブルは、データを管理・保存するための入れ物 行と列で構成され、データはレコードとして記録される
列A 列B 列C 列D 列E 行 列 レコード テーブルのイメージ
(C) Recruit Co.,Ltd. All rights reserved. 26 テーブルの結合 テーブルの結合とはSQLの「結合(JOIN)」を使用してデータ ベース内の複数のテーブルから関連するデータを組み合わせて新
たなデータセットを作成する方法で、結合の種類には、内部結合、 外部結合、クロス結合などがあり、それぞれ異なるシナリオや要 件に応じて活用される 引用元:https://xs691486.xsrv.jp/wp-content/uploads/2024/01/2.27- 2%E3%80%801.%E5%86%85%E9%83%A8%E7%B5%90%E5%90%88%E3%80%80%E5%86%85%E9%83%A8%E7%B5%90%E5%90%88%E3%80%81%E5%A4%96%E9%83% A8%E7%B5%90%E5%90%88%E3%80%81%E3%82%AF%E3%83%AD%E3%82%B9%E7%B5%90%E5%90%88%E3%80%802000%C3%972000-1024x1024.jpg
(C) Recruit Co.,Ltd. All rights reserved. 27 インデックス インデックスはテーブル内の大量のデータの中から必要 な情報を素早く見つけ出すための道しるべのようなもの
インデックスの仕組み 本の索引が特定の主題やキーワードがどのページにある のかを明示することで、情報を迅速に検索できるように しているように、 データベースのインデックスもテー ブル内の特定の列(フィールド)に対して作成され、そ の列に格納されているデータの検索を高速化する
(C) Recruit Co.,Ltd. All rights reserved. 28 SQLとは SQLはデータベースがデータ操作のために備えてい る言語で大きく3つに分類される
• DDL:データ定義言語 • DML:データ操作言語 • DCL:データ制御言語 なお、データベース製品には多くの種類があるが、 SQLはISO(国際標準化機構)で標準化されている ため、SQLを覚えれば多くのデータベースで扱える
(C) Recruit Co.,Ltd. All rights reserved. 29 DDL DDL(Data Definition
Language)はデータ定 義言語と呼ばれ、テーブルや索引、シーケンスなど のデータベースオブジェクトを定義する言語 データベースやテーブルを新規に作成(CREATE) する場合や、変更(ALTER)、削除(DROP)する 際に使用する また、テーブルに格納されているデータを一括です べて削除するTRUNCATEも、DDLに含まれる
(C) Recruit Co.,Ltd. All rights reserved. 30 DML DML(Data Manipulation
Language)はデー タ操作言語と呼ばれ、データベースを操作し、格納 されているデータの検索や削除などを行うための言 語 データベースを使用する中で最も使用する言語と言 えます。命令文は、データの検索(SELECT)、更 新(UPDATE)、挿入(INSERT)、削除 (DELETE)がある
(C) Recruit Co.,Ltd. All rights reserved. 31 DCL DCL(Data Control
Language)はデータ制御言 語と呼ばれ、データやトランザクションを制御する ための言語です。ユーザーに対してアクセス権限を 付与(GRANT)する命令や、権限の取消 (REVOKE)が含まれる なお、データベース製品によっては、COMMITや ROLLBACKなどトランザクションを制御する言語 (TCL)も、DCLに含める場合がある
(C) Recruit Co.,Ltd. All rights reserved. 32 クエリ クエリとは、SQLを実行した際にデータベースへ送るための 命令文のこと
SQLとクエリの違い(混同されやすい) • SQL:データベースを操作するための言語 • クエリ:SQLを実行する際にデータベースに送る命令文
(C) Recruit Co.,Ltd. All rights reserved. 33 サブクエリ(副問い合わせ) サブクエリ(副問い合わせ)とは、クエリの中で使用される別の クエリのことを指す
サブクエリを使用すると、複雑な条件を持つクエリを簡潔に表現 でき、データの抽出や加工をより柔軟に行うことができる SELECT 商品ID, 商品名 --主問い合わせ FROM 商品リスト WHERE EXISTS ( SELECT * -- このSELECT文が副問い合わせ FROM 売上表 WHERE 売上表.商品ID = 商品リスト.商品ID ) サブクエリの例
(C) Recruit Co.,Ltd. All rights reserved. 34 トランザクション SELECTおよび 更新系のINSERT/DELETE/UPDATE等の
複数のSQLクエリを一貫性のある形でひとまと まりにして扱い、実行する仕組み
(C) Recruit Co.,Ltd. All rights reserved. 35 ビュー(View) ビュー(View) はSQLに名前をつけて保存した仮想テーブルの
ようなもの(但しテーブルのようにデータは持たず、テーブルに 対するSELECTを持っている)で、ビューを使用するとSQL文が すっきり書けるメリットがある 引用元:https://image.itmedia.co.jp/ait/articles/1703/01/r20_06-01.PNG 例:サブクエリをビューに置き換え
(C) Recruit Co.,Ltd. All rights reserved. 36 3. データベース設計の前に 必要なこと
(C) Recruit Co.,Ltd. All rights reserved. 37 「要求」と「要件」の明確化 設計の前に「要件」と「要求」の明確化が重要 ビジネス要求
ビジネス要件 業務要求 業務要件 システム要求 システム要件 ※赤俊哉著『要件定義のセオリー』に掲載の図を元に作成
(C) Recruit Co.,Ltd. All rights reserved. 38 要求と要件の違い • 「要求」=
本当に欲しいもの = ユーザが情報シ ステムで実現したいこと • 「要件」= 本当に要るもの = 要求に基づきつつ、 制約を踏まえて、情報システムに盛り込むべきも の
(C) Recruit Co.,Ltd. All rights reserved. 39 要件と要求の関係 圧倒的な数の要求に対して、絞り込み、練り込んだ要件からシステ ムを設計・実装する
要求 要件 引用元:https://www.google.com/url?sa=i&url=https%3A%2F%2Fwand- d.com%2Fcolumn%2F001iceberg%2F&psig=AOvVaw06p_5eR3fRFokCNZ Is9ZeL&ust=1718792150721000&source=images&cd=vfe&opi=8997844 9&ved=0CBEQjRxqFwoTCLC2hvD15IYDFQAAAAAdAAAAABAE
(C) Recruit Co.,Ltd. All rights reserved. 40 ウォーターフォール開発とアジャイル開発 における要求の取り扱いの違い ウォーターフォール(WF)開発とアジャイル(Agile)
開発はソフトウェア開発のアプローチにおいて大きく異 なる哲学とプロセスを持っており、特に、要求定義の取 り扱い方において顕著な違いがある
(C) Recruit Co.,Ltd. All rights reserved. 41 ウォーターフォール開発における要求 詳細な要求定義 プロジェクト開始前に全ての要求を収集・分析・文書化する。
この段階で定義された要求はプロジェクト全体を通じて基本的 に変更されることはない 計画の重視: 全てのプロジェクト活動は事前に計画され、スケジュールに 従って厳格に管理される 引用元:https://www.ogis- ri.co.jp/otc/hiroba/technical/IntroASDooSquare/chapter4/image/WaterfallLifecycle.jpg
(C) Recruit Co.,Ltd. All rights reserved. 42 アジャイル開発における要求 引用元:https://www.ogis- ri.co.jp/otc/hiroba/technical/IntroASDooSquare/chapter4/image/Iterati
onOfXPwithAM.jpg 進化する要求 要求はプロジェクトの進行とともに進化し続けると考えられ、 初期段階で完全には固定されない。フィードバックを基に要求 が追加、変更、削除されることがある 反復的・漸進的開発 短い開発サイクルを繰り返し、各イテレーションでユーザから のフィードバックを取り入れながら製品を改善していく
(C) Recruit Co.,Ltd. All rights reserved. 43 補足:アジャイル開発における要件定義 アジャイル開発では繰り返しの前に、要件定義で大 枠をしっかり掴み、設計から実装工程でなるべくブ
レを生じさせないことが大切
(C) Recruit Co.,Ltd. All rights reserved. 44 4. 本題:データベース設計
(C) Recruit Co.,Ltd. All rights reserved. 45 データベース設計とは データベース設計とは、データベースによっ てデータを管理できるように、現実の世界を
抽象化してデータモデルを作成していく作業 (データモデリング)
(C) Recruit Co.,Ltd. All rights reserved. 46 データモデルは大まかにエンティティと属性、リレーションシップで構成される データモデルの構成要素
(C) Recruit Co.,Ltd. All rights reserved. 47 データモデル システムまたは組織のデータの構造、関係性、および制約を記述す る表現でデータ型、エンティティ、属性、およびそれらの関係(リ
レーション)を定義する エンティティ データモデルの構成要素のひとつで組織全体もしくはシステム開発 における「静的な管理対象(取引先・商品などのデータの集ま り)」を指し、「実体」と訳される データモデルとエンティティの関係
(C) Recruit Co.,Ltd. All rights reserved. 48 エンティティは以下の「5W1H」を表す名詞 • 誰が(Who):人、組織、取引先、顧客など
• 何を(What):製品、商品、原材料、サービスなど • いつ(When):年月(日)、季節、催事、会計年度など • どこで(Where):国や地域、住所、店舗、陳列棚など • なぜ(Why):業務ルール、法律、慣行、問い合わせ、ク レームなど エンティティが表す概念
(C) Recruit Co.,Ltd. All rights reserved. 49 エンティティはリソース系orイベント系および従属or独立のそれ ぞれの軸で分けられる エンティティの種類
独立 従属 リソース系 イベント系
(C) Recruit Co.,Ltd. All rights reserved. 50 リソース系エンティティ データベースの設計・実装時に「マスタ」となりうるエンティティ でビジネスおよび業務におけるあり方を示し、資源となりうるもの
を指す 例えば「取引先」「顧客」「商品」「サービス」等 イベント系エンティティ データベースの設計・実装時に「トランザクション」となりうるエ ンティティでビジネスおよび業務の行為により発生するものを指す 例えば「受注」「発注」などの出来事 リソース系エンティティ/イベント系エンティティ
(C) Recruit Co.,Ltd. All rights reserved. 51 独立エンティティ 例えば「顧客」や「商品」など、他のエンティティに依存する ことなく存在するエンティティ
従属エンティティ 他のエンティティに依存して存在する「受注明細」(「受注」 がないと成立しない)のようなエンティティ 独立エンティティと従属エンティティ
(C) Recruit Co.,Ltd. All rights reserved. 52 リレーションシップは、エンティティ(実体)同士のつながり(関 係)を意味するが、大きく分けて以下の3つに分類される リレーションシップの種類
リレーションシップの種類 ①依存型 ➁非依存型 ③汎化型
(C) Recruit Co.,Ltd. All rights reserved. 53 あるエンティティが他に依存して存在する場合、その関係はリレーションシップ は依存型(「従属関係」という呼び方もある) ER図では独立エンティティまたは従属エンティティから、従属エンティティに
向けて実線で結んで表現する ①依存型リレーションシップ 引用元:https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image- store.s3.amazonaws.com%2F0%2F59354%2F16327612-8002-548a-216d- b2829ce40a25.png?ixlib=rb-4.0.0&auto=format&gif- q=60&q=75&s=cfb6a785a4b2bcc2034ea62bdc3a2f8a
(C) Recruit Co.,Ltd. All rights reserved. 54 エンティティ間の依存関係がない場合は、非依存型のリレーションシップになる (「参照関係型」という呼び方もある) ER図では独立エンティティから他の独立エンティティに向けて点線でつないで
表現する ➁非依存型リレーションシップ 引用元: https://www.google.com/url?sa=i&url=https%3A%2F%2Fenvader.plus%2Farticle%2F48&psig=AOvVaw1R5n OPYjWviuTPjMDYIaJg&ust=1718879139360000&source=images&cd=vfe&opi=89978449&ved=0CBEQjRxqFw oTCPjB4Pi554YDFQAAAAAdAAAAABAE
(C) Recruit Co.,Ltd. All rights reserved. 55 親と子のエンティティが汎化関係にある場合のリレーションシップを汎化型と呼ぶ その場合、親エンティティを「スーパータイプ」、子エンティティを「サブタイ プ」と呼ぶ
③汎化型リレーションシップ 引用元:https://image.itmedia.co.jp/ait/articles/1703/01/r20_06-01.PNG
(C) Recruit Co.,Ltd. All rights reserved. 56 「サブジェクトエリア」とはデータモデル全体をいくつかに区切った場合の、 個々の領域(範囲)のこと 例えば業務単位で区切る場合は販売・購買・在庫管理等に分け、事業単位で管理
する場合は、外食・物販・不動産等に分ける サブジェクトエリア(サブジェクトスコープ) 引用元:https://assets.st-note.com/img/1700395732347-IkB5MlsNmQ.jpg?width=800
(C) Recruit Co.,Ltd. All rights reserved. 57 5. データモデリング
(C) Recruit Co.,Ltd. All rights reserved. 58 データモデリングの各工程 データモデルを作成していく作業(データモデリング)は、一 般的に概念設計、論理設計、物理設計という3つの段階を通し
て行われ、それぞれの段階ではアウトプットとして概念モデル、 論理モデル、物理モデルが作成される 引用元:https://gihyo.jp/dev/feature/01/database/0001
(C) Recruit Co.,Ltd. All rights reserved. 59 概念設計 システムに必要なデータの全体像(概念デー タモデル)を定義することによって、データ
に関する要求を明確にする作業 概念データモデルはビジネス(業務)の観点 で必要な情報の体系をデータモデルとして表 現したもの
(C) Recruit Co.,Ltd. All rights reserved. 60 論理設計 特定のデータベースに依存しないデータモデ ル(論理データモデル)を作る
論理データモデルでは、業務における意味を 反映した日本語での項目名や項目に関する説 明などを定義することで、業務においてどの ようなデータが必要なのかを詳細に定義する
(C) Recruit Co.,Ltd. All rights reserved. 61 物理設計 特定のデータベース(Oracle, DB2,
SQL, Server…)を前提とした物理的なデータ仕 様を定義した物理データモデルを作る 物理データモデルでは、具体的にはテーブル、 属性、キー制約、別名、インデックス、 ビューといった実際のデータベース構築に必 要な詳細情報を定義する
(C) Recruit Co.,Ltd. All rights reserved. 62 各工程での主な成果物 概念設計:コンセプトモデル図(UML) 論理設計:ER図、エンティティ状態遷移図
、エンティティ定義書等 物理設計:ER図、テーブル定義書ライフサ イクル定義書、キー項目体系定義書、DDL 等
(C) Recruit Co.,Ltd. All rights reserved. 63 データモデルパターン データモデルパターンは、システム設計にお けるデザインパターンと同様に業種や業務の
違いに左右されない汎用なデータモデル ※代表的なパターンとして、人や組織を表す「パー ティパターン」や受注/発注を表す「取引パター ン」等がある
(C) Recruit Co.,Ltd. All rights reserved. 64 データモデルパターン例 例)パーティパターン 引用元:https://www.biprogy.com/pdf/tec_info/11102.pdf
(C) Recruit Co.,Ltd. All rights reserved. 65 DMBOKについて またDMBOKは、データ管理に関連するさ まざまな領域を包括的にカバーしており、
データ管理の専門家が共通の基準と言語 でコミュニケーションを図るための基盤 を提供している DMBOK(Data Management Body of Knowledge)は、 データ管理の専門知識を体系的にまとめたガイドであり、デー タ管理のベストプラクティス、手法、および用語を定義してお り、データ管理の標準化を目指している 引用元:https://m.media-amazon.com/images/I/51YN9LdHKgL.jpg
(C) Recruit Co.,Ltd. All rights reserved. 66 データモデリングのアプローチ方法 システム開発は「トップダウンで骨組み、ボ トムアップで肉付け」が基本で、DB設計に
に関しても同様の考えでモデリングする
(C) Recruit Co.,Ltd. All rights reserved. 67 トップダウンアプローチ トップダウンアプローチとは、ビジネス要件 →業務要件→システム要件とブレイクダウン
してきた要件を基に、「本来あるべきデータ モデル」を作成する手法で、主にリソース系 エンティティの抽出と定義で行われる
(C) Recruit Co.,Ltd. All rights reserved. 68 ボトムアップアプローチ ボトムアップモデリングとは既存の画面や業務フ ロー等により捕獲した発生データを基に、主にイベ
ント系エンティティの抽出と定義の際に行われる その他、ボトムアップアプローチでは、UIプロトタ イプや画面遷移等から項目(リソース系・イベント 系ともに)の洗い出しと定義を行いつつ、正規化を 実施して、「現実に即したデータモデル」を作成す る
(C) Recruit Co.,Ltd. All rights reserved. 69 データモデリングでは、属性を統一したグループを”ドメイン”と呼ぶ 一方で『実践オブジェクト指向設計』で扱うドメイン駆動設計における”ドメイ ン”は「システムが対象とする事業が取り扱う世界」を表し、全く別のものを指
すので混同しないように注意 注:データモデリングにおける”ドメイン”
(C) Recruit Co.,Ltd. All rights reserved. 70 5-1. 概念データモデリング
(C) Recruit Co.,Ltd. All rights reserved. 71 概念データモデルとは 概念(コンセプト)データモデルとは、システムの構想 段階でのラフスケッチにあたるデータモデルのことで、
全体の静的ビジネス要求を把握するために作成する ※概念データモデルを作る過程では、様々なビジネスルールが明らか になってくる 引用元:https://www.ulsystems.co.jp/archives/assets/topics_modeling_002_23.gif
(C) Recruit Co.,Ltd. All rights reserved. 72 概念データモデルを省くケース 特にコンシューマ向けシステムで、この工程を実施 しないケースも多く、また「論理データモデル」を
ほぼ「概念データモデル」として位置付けるアプ ローチもある。 しかしながら、エンタープライズ系等、業務で扱う データの全体像を掴む必要がある場合は、「木を見 て森を見ず」にならないように作成が推奨される
(C) Recruit Co.,Ltd. All rights reserved. 73 5-2. 論理データモデリング
(C) Recruit Co.,Ltd. All rights reserved. 74 論理データモデルとは 論理データモデルは、概念データモデルにて登録したエンティ ティに対し、属性を定義していくことにより作成する。また、
属性定義とともに、「正規化」と具体的なデータやその関係性 等の「抽象化」を行うことにより、データ構造を確定していく 引用元:https://www.ulsystems.co.jp/archives/assets/topics_modeling_002_05.gif
(C) Recruit Co.,Ltd. All rights reserved. 75 論理モデル設計フェーズで行うこと • 属性の定義
• 属性名の命名ルールの標準化と明確化 • ドメインの定義 • 正規化の実施 • 主キーと外部キーの設定 • サブジェクトエリアの確定 ..etc
(C) Recruit Co.,Ltd. All rights reserved. 76 正規化とパフォーマンスについて 正規化とは冗長さを省く反面、テーブル結合時のコ スト等がかかるため、パフォーマンス要件の厳しい
システムではレスポンスのボトルネックの原因にな りやすいので実装時には注意 またその際、部分最適・局所的にパフォーマンス チューニングしようとすると設計・実装が複雑化す ることもあるため、アプリケーションにおいてDB 設計は非常に重要といえる
(C) Recruit Co.,Ltd. All rights reserved. 77 5-3. 物理データモデリング
(C) Recruit Co.,Ltd. All rights reserved. 78 物理データモデルとは 物理データモデルは、論理データモデルを基にして、以 下の事項について取捨選択を行い、対策を講じる形で作
成する • 技術上の制約 • アプリケーションの用途 • パフォーマンス(性能に関する要求) 引用元:https://www.ogis-ri.co.jp/otc/swec/process/am-res/am/images/models/physicalDataModel.jpg
(C) Recruit Co.,Ltd. All rights reserved. 79 物理モデル設計フェーズで行うこと 主に以下のような作業を行なうことで、「開発者が読むための 論理モデル」から「実際にDBMS上に実装するための物理モデ
ル」へデータモデルを精査していく • テーブル名/項目名に物理名(英語名)を定義 • 属性のデータ型/桁数/精度を定義 • 一意制約やNOT NULL等の各種ルールを定義 • パフォーマンス等を考慮し「正規化崩し」を実施 • インデックスやトリガーの定義 ..etc
(C) Recruit Co.,Ltd. All rights reserved. 80 物理データモデル作成後は、以下を考慮しながら、DB の実装環境を構築していく •
キャパシティプランニング • パーティショニング • 性能要件(パフォーマンス) • 排他制御 • データセキュリティ • トランザクションの単位..etc 物理設計後の考慮事項
(C) Recruit Co.,Ltd. All rights reserved. 81 6. データベースの変更容易性
(C) Recruit Co.,Ltd. All rights reserved. 82 データベースのリファクタリング DBのスキーマ(構造)は、アプリケーションと密接に結びついて いるため、以下のようなDBのリファクタリングは容易ではない。
• クエリの書き換え • テーブル名や属性名の変更 • 外部キーやその他制約の変更 • ビューの修正 • ストアドプロシージャの修正 テーブルの定義を変更することによって、そのテーブルへアクセ スする処理すべてに影響範囲が広がる。そのため、一度DBに手を 入れると実にさまざまな調整が必要になる。
(C) Recruit Co.,Ltd. All rights reserved. 83 つまり、データベースは変更に弱い
(C) Recruit Co.,Ltd. All rights reserved. 84 DB設計における拡張性の考慮 拡張性の考慮とは、「将来発生しうる変化」を予測し、 その変化が起こったときにもシステムの改修量を最低限
に抑えられるようなモデルを検討すること。言い換える と、現状の概念モデルにおいて「現実に起こりうる業務 上の変化」に耐えられないところを発見し、そのモデル を「変更に強いモデル」に精査していくこと 引用元:https://www.ulsystems.co.jp/archives/assets/topics_modeling_002_21.gif
(C) Recruit Co.,Ltd. All rights reserved. 85 データベースの変更の難しさを踏まえた データモデリングのポイント •
「構築するシステムのデータベース設 計」よりも広い視野に立ち「将来も見据 えた最適なデータモデルを検討する」こ と • 既存のデータやテーブル構造に直接的な 影響を与える変更より漸進的に追加・拡 張していく形が望ましい
(C) Recruit Co.,Ltd. All rights reserved. 86 7. オブジェクト指向とデータベース
(C) Recruit Co.,Ltd. All rights reserved. 87 ソフトウェア開発においてオブジェクト指向プログラミング(OOP)とデータ ベースの連携や相互作用において両者のパラダイムの違いにより、しばしばミス マッチ(インピーダンスミスマッチ)が起こる。例えば以下の違い
オブジェクト指向プログラミング オブジェクトがメモリ内でどこに存在するかは透過的で、参照を通じて自由に他 のオブジェクトへ直接アクセスできるため、オブジェクト間の関係性も柔軟に組 み替えたり、構築することが可能 データベース DBのデータは固定されたテーブルの列定義に従って格納され、主キーによって 各レコードの位置が定義されるため、特定のデータへのアクセスはSQLクエリを 通じて、特定のパス(クエリ)を定義してその結果を得る必要がある オブジェクト指向とデータベースの連携
(C) Recruit Co.,Ltd. All rights reserved. 88 要するにオブジェクト指向のオブジェクトは他のオブ ジェクトを直接参照することによって自由にオブジェ クト同士の関係性を表現できるが、データベースでは
特定のレコードへは「固定されたルート」でしかアク セスできない このような違いは両者の連携の際にギャップを生むこ とになる
(C) Recruit Co.,Ltd. All rights reserved. 89 例えば注文と商品が多対多で表現する際に、概念上は、注文と商品は簡単に結び つけられるが、テーブル構造でで表現する際は、直接結びつけられず、両者の組 み合わせを格納するための中間テーブルが必要になる
インピーダンスミスマッチの例(中間テーブル) 論理データモデル
(C) Recruit Co.,Ltd. All rights reserved. 90 8. データベース設計における盲点 (NULLと3値論理)
(C) Recruit Co.,Ltd. All rights reserved. 91 複数の項目に対して複合ユニーク制約を設定しても、どちらかの項 目がNULLの場合、重複を許してしまう。例えば下記の例では deleted_atとemailで複合ユニーク制約を設定してもdeleated_at
がNULLの場合に重複を許してしまう。その原因はSQLの3値論理。 複合ユニーク制約とNULL 同じ値が重複で INSERTできてしま う 複合ユニーク制約
(C) Recruit Co.,Ltd. All rights reserved. 92 3値論理とは通常の真 (true) と偽
(false) から成る真偽値の他 に、第3の真理値を持つ論理体系(多値論理のひとつ)。 SQLでは、NULLはTRUEやFALSEではなく「値が存在しない (不明=UNKNOWN)」を意味する。 そのため、前頁では複合ユニーク制約(email, deleted_at)を 設定しているにも関わらず、deleted_at がNULLの場合、同 じemailの値を持つレコード同士が重複と判断されないため、 重複データのINSERTが可能になった。 SQLの3値論理について
(C) Recruit Co.,Ltd. All rights reserved. 93 PostgreSQLにはパーシャルユニークインデックスと呼ばれる ものがある 上図のインデックスは以下の仕様
• deleted_at IS NULLのemailにだけユニーク制約をかける • 削除済み(deleted_at IS NOT NULL)のemailは重複してもよい 参考:パーシャルインデックス
(C) Recruit Co.,Ltd. All rights reserved. 94 補足1:プレフィックス マスタ(M)とトランザクション(T)
(C) Recruit Co.,Ltd. All rights reserved. 95 マスタ(リソース系)とトランザクション(イベ ント系)を区別するために、テーブル名にプレ フィックス(マスタがM、トランザクションがT)
を付けてことが多いが、あまり推奨はされない (意味がない) マスタとトランザクション
(C) Recruit Co.,Ltd. All rights reserved. 96 9. イミュータブルデータモデル
(C) Recruit Co.,Ltd. All rights reserved. 97 リソース系エンティティに内在する状態変化(イベン ト)を明示的に抽出し、それらを履歴として不変のデー タとして記録・蓄積することで、データとしての完全性
を保つ手法 イミュータブルデータモデルとは 引用元:https://gihyo.jp/magazine/wdpress/archive/2022/vol130
(C) Recruit Co.,Ltd. All rights reserved. 98 リソースエンティティが発生、変更、消滅するところに はイベントが存在する リソースとイベントの関係
引用元:https://gihyo.jp/magazine/wdpress/archive/2022/vol130
(C) Recruit Co.,Ltd. All rights reserved. 99 • 「すべてをイミュータブル(不変)にすべき」は 現実的では
ない • 「重要な状態変化(意味のあるビジネスイベント)」を不変 な履歴として残すのがイミュータブルデータ設計の目的 • 「現在の状態」は必要な場合は少なくない(従ってUPDATE を全く使わない設計もまた現実的ではない) イミュータブルデータモデルのポイント
(C) Recruit Co.,Ltd. All rights reserved. 100 データ量の肥大化 全履歴をINSERTで残すため、年月が経つにつれてテーブ ルが巨大になりやすい
クエリの複雑化・高負荷化 複数の履歴レコードを集約する処理が必要な場合、パ フォーマンスに影響する イミュータブルデータモデルの 問題点やトレードオフ
(C) Recruit Co.,Ltd. All rights reserved. 101 10. 大規模システムにおける データベース
(C) Recruit Co.,Ltd. All rights reserved. 102 大規模サービスにおけるインデックスの重要性 大規模サービスにおいて、インデックス(Index) は非常に重要で、正しいインデックス設計が性能・
可用性・スケーラビリティ等に直結する。 理由1 データ量 大規模サービスはデータ量が指数関数的に増える 理由2 ユーザ数やトラ フィック 大規模サービスはユーザ数やトラフィックが多く、小 さな遅延の積み重ねが致命的になりかねない 理由3 スケールアウト の猶予 DBのスケールアウトは手間がかかるので、インデッ クスで抑えられる 大規模サービスにおいてインデックスが重要になる理由
(C) Recruit Co.,Ltd. All rights reserved. 103 大規模システムでは、単一のDBでの運用するケースは少な く、負荷分散をしながら複数のDBでサービスを運用してい る(スケールアウト)
スケールアウトの手法として、主にレプリケーションや シャーディング(水平分割)の方法を採ることが多い なお、二つを掛け合わせるケースもある データベースのスケールアウト
(C) Recruit Co.,Ltd. All rights reserved. 104 主に読み出し(Read)用のDBをレプリカとして増やして負荷分散する方法 • メリット:運用が比較的楽、障害時のバックアップとしても使える
• デメリット:マスタが単一の場合、書き込みに負荷がかかる レプリケーション 引用元:https://insights-jp.arcserve.com/wp-content/uploads/2022/08/ijZ7t8YUnRyXgL4Mpz2mVsuoC-1659946336.png
(C) Recruit Co.,Ltd. All rights reserved. 105 1つのDBサーバ上に格納された、1つのテーブルデータを、レコード(行)単位 で複数のサーバに分散して保持することをシャーディング(水平分割)と呼ぶ ※正確にはシャーディングには列単位で分割する垂直分割もある
シャーディング(水平分割) 引用元:https://i0.wp.com/pecopla.net/wp-content/uploads/2019/10/ecf48f973a24b465a8e59a97386a3ae9.png?resize=650%2C408&ssl=1
(C) Recruit Co.,Ltd. All rights reserved. 106 DBRE(Database Reliability Engineering)は、データ
ベースシステムの信頼性、パフォーマンス、効率性を維持する ための実践であり、SRE(Site Reliability Engineering) の概念をデータベース管理に適用したもので、DBREにおいて は、データベースの設計が非常に重要。 設計が不適切だと、データの登録や取得が複雑になったり、そ れがシステムのレスポンスタイムに悪影響を及ぼし、最終的に はアプリケーション全体のパフォーマンスが低下する等、影響 が大きい DBREとデータベース設計
(C) Recruit Co.,Ltd. All rights reserved. 107 11. データベースのアーキテクチャ
(C) Recruit Co.,Ltd. All rights reserved. 108 データベースの構造(3層スキーマ) 現代の多くのデータベースシステムではデータベー スの構造を以下の3つの層に分けて定義する
• 外部スキーマ(ビュー層) • 概念スキーマ(論理層) • 内部スキーマ(物理層)
(C) Recruit Co.,Ltd. All rights reserved. 109 外部スキーマ(ビュー層) 画面のUIや入力データ等、「ユーザから見たデータ ベース」の姿を表すスキーマ
引用元:https://itmanabi.com/wp-content/uploads/2018/12/db-schema.png
(C) Recruit Co.,Ltd. All rights reserved. 110 概念スキーマ(論理層) テーブル定義(データの要素やデータ同士の関係) を記述するスキーマで「開発者から見たデータベー
ス」を表す 引用元:https://itmanabi.com/wp-content/uploads/2018/12/db-schema.png
(C) Recruit Co.,Ltd. All rights reserved. 111 内部スキーマ(物理層) 概念スキーマで定義された論理データモデルを DBMS内部に格納する具体的な方法を定義するス
キーマで「DBMSから見たデータベース」を表す 引用元:https://itmanabi.com/wp-content/uploads/2018/12/db-schema.png
(C) Recruit Co.,Ltd. All rights reserved. 112 概念・論理・物理の各データモデルと3層スキー マアーキテクチャの対応 引用元:https://metafind.jp/wp-content/uploads/2023/02/bbb60a98ec07ab378b142f894d5083ca.png
(C) Recruit Co.,Ltd. All rights reserved. 113 概念・論理・物理の各データモデルと3層スキー マアーキテクチャの対応(DMBOK準拠) 外部スキーマ(ビュー層)
概念スキーマ(論理層) →概念データモデル(概念設計) →論理データモデル(論理設計) 内部スキーマ(物理層) →物理データモデル(物理設計)
(C) Recruit Co.,Ltd. All rights reserved. 114 データベースが3層に分かれている理由 データベースが3層構造に分かれている理由の一つ が、データの独立性の保証で、例えば、アプリケー
ションの要求(外部スキーマ)が変わったり、デー タの物理的な格納方法(内部スキーマ)が変わった りしても、他の層が影響を受けないようにデザイン されている この独立性は、システムの拡張性と適応性を向上さ せ、継続的な変化に対応しやすくする
(C) Recruit Co.,Ltd. All rights reserved. 115 12. デーベース設計の実践
(C) Recruit Co.,Ltd. All rights reserved. 116 事前課題の確認 【課題内容】 架空の
EC サイト(R 書店)を設計・実装してください ※『実践アプリケーション設計』講座と共通の課題
(C) Recruit Co.,Ltd. All rights reserved. 117 実践データベース設計:①データベース設計概論 実践データベース設計:②概念データモデリング 実践データベース設計:③論理データモデリング
実践データベース設計:④物理データモデリング 当講座の資料構成 データベース設計の詳細については以下の資料で解説
(C) Recruit Co.,Ltd. All rights reserved. 118 データベースの仕組みやデータベース設計の概要等 について解説(※当資料) 実践データベース設計
①データベース設計概論
(C) Recruit Co.,Ltd. All rights reserved. 119 架空のECサイト(R書店)のデータベース設計を ベースに概念データモデリングについて解説 実践データベース設計
②概念データモデリング
(C) Recruit Co.,Ltd. All rights reserved. 120 架空のECサイト(R書店)のデータベース設計を ベースに論理データモデリングについて解説 実践データベース設計
③論理データモデリング
(C) Recruit Co.,Ltd. All rights reserved. 121 架空のECサイト(R書店)のデータベース設計を ベースに物理データモデリングについて解説 実践データベース設計
④物理データモデリング
(C) Recruit Co.,Ltd. All rights reserved. 122 13. データベース設計で大事なこと
(C) Recruit Co.,Ltd. All rights reserved. 123 データベースとアプリケーションの連携 データベースとアプリケーションの連携の実態 ※データベース設計の不備をアプリケーション側の設計で吸収することも少なくない
DB設計の不備によってアプリ ケーションとのスムーズな連携 が難しいケースが少なくない
(C) Recruit Co.,Ltd. All rights reserved. 124 理想と現実との隔たり ドキュメントベースで想定されるシステムの理想的 なイメージと実物との隔たりは少なくない。
そのため、日頃から手を動かしてモノづくりを行い、 要件定義や設計の際には実装から逆算してイメージ したり、思考できるようにしておくことが大事 理想 実際の実装 引用元:https://thumb.ac- illust.com/0c/0c40bbe466ee623d574f8642383409f7_t.jpeg
(C) Recruit Co.,Ltd. All rights reserved. 125 【結論】 データベースの設計を磨くにはデータ ベース単体ではなく、データベースを含
むアプリケーション全体を設計・実装す る力を養うことが大事
(C) Recruit Co.,Ltd. All rights reserved. 126 14. 当講座の推薦図書
(C) Recruit Co.,Ltd. All rights reserved. 127 データベースの基本的な仕組みや正規化等について詳し く解説されている良書 『達人に学ぶDB設計
徹底指南書』 引用元:https://m.media-amazon.com/images/I/91KkYEHTxXL._SL1500_.jpg
(C) Recruit Co.,Ltd. All rights reserved. 128 15.当講座の関連リポジトリ
(C) Recruit Co.,Ltd. All rights reserved. 129 当講座の関連リポジトリ(GHE) 架空のECサイトR書店 •
rbooks-jpa (https://ghe.misosiru.io/takeshi-fujimoto/rbooks-jpa) • rbooks-ddd-jpa (https://ghe.misosiru.io/takeshi-fujimoto/rbooks-ddd-jpa)