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
いまさら聞けないテーブル設計 / Table design that can not be h...
Search
toshifusa
February 14, 2019
Technology
0
170
いまさら聞けないテーブル設計 / Table design that can not be heard now
テーブル設計手法の紹介
toshifusa
February 14, 2019
Tweet
Share
More Decks by toshifusa
See All by toshifusa
スイッチ交換でデータベースが苦労した話 / rebuild mysql group replicaton
toshifusa
4
1.2k
Other Decks in Technology
See All in Technology
現場で効くClaude Code ─ 最新動向と企業導入
takaakikakei
1
250
dbt開発 with Claude Codeのためのガードレール設計
10xinc
2
1.2k
DDD集約とサービスコンテキスト境界との関係性
pandayumi
3
280
「どこから読む?」コードとカルチャーに最速で馴染むための実践ガイド
zozotech
PRO
0
450
TS-S205_昨年対比2倍以上の機能追加を実現するデータ基盤プロジェクトでのAI活用について
kaz3284
1
160
2025年夏 コーディングエージェントを統べる者
nwiizo
0
170
Automating Web Accessibility Testing with AI Agents
maminami373
0
1.3k
La gouvernance territoriale des données grâce à la plateforme Terreze
bluehats
0
180
Autonomous Database - Dedicated 技術詳細 / adb-d_technical_detail_jp
oracle4engineer
PRO
4
10k
DevIO2025_継続的なサービス開発のための技術的意思決定のポイント / how-to-tech-decision-makaing-devio2025
nologyance
1
400
EncryptedSharedPreferences が deprecated になっちゃった!どうしよう! / Oh no! EncryptedSharedPreferences has been deprecated! What should I do?
yanzm
0
380
250905 大吉祥寺.pm 2025 前夜祭 「プログラミングに出会って20年、『今』が1番楽しい」
msykd
PRO
1
930
Featured
See All Featured
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
The Power of CSS Pseudo Elements
geoffreycrofte
77
6k
Fireside Chat
paigeccino
39
3.6k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
Art, The Web, and Tiny UX
lynnandtonic
303
21k
Mobile First: as difficult as doing things right
swwweet
224
9.9k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
31
2.2k
The Straight Up "How To Draw Better" Workshop
denniskardys
236
140k
Typedesign – Prime Four
hannesfritz
42
2.8k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.6k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
36
2.5k
Transcript
いまさら聞けない テーブル設計 テクノロジー本部R&D部インフラG所属 鈴木利房
こんな質問 を受けた時 テ ー ブ ル 設 計 っ て
堂々と答えられ てますか? テ ー ブ ル 設 計
まさか雰囲気でテーブル設計を? • 既存システムを参考に
まさか雰囲気でテーブル設計を? • 既存システムを参考に • 先輩から教わった方法で
まさか雰囲気でテーブル設計を? • 既存システムを参考に • 先輩から教わった方法で • ググって出てきたページを参考に
まさか雰囲気でテーブル設計を? • 既存システムを参考に • 先輩から教わった方法で • ググって出てきたページを参考に • 雑誌の記事を参考に
まさか雰囲気でテーブル設計を? • 既存システムを参考に • 先輩から教わった方法で • ググって出てきたページを参考に • 雑誌の記事を参考に •
会社の書棚に置いたあった本を参考に
テーブル設計の手法って 調べると色々見つかるんですが、自分はTMが一番しっ くり来てるので紹介します。
TM(Theory of Models)とは
TM(Theory of Models)とは • 佐藤正美氏が提唱するデータモデリング手法
TM(Theory of Models)とは • 佐藤正美氏が提唱するデータモデリング手法 • 1999年に「T字形ERデータベース設計技法」として発表
TM(Theory of Models)とは • 佐藤正美氏が提唱するデータモデリング手法 • 1999年に「T字形ERデータベース設計技法」として発表 • 2015年にTM(Theory of
Models)に改称
TM(Theory of Models)とは • 佐藤正美氏が提唱するデータモデリング手法 • 1999年に「T字形ERデータベース設計技法」として発表 • 2015年にTM(Theory of
Models)に改称 • T字形の独特なER図を使う • ルールに則ったモデリングでモデルの属人性を排除する
TMのER図ってこんな感じです • 左にキー • 右にアトリビュートを配置する
TMの歴史 1999年
TMの歴史 1999年 2000年
TMの歴史 1999年 2000年 T字形ER
TMの歴史 1999年 2000年 2005年 T字形ER
TMの歴史 1999年 2000年 2005年 2009年 T字形ER
TMの歴史 1999年 2000年 2005年 2009年 T字形ER TM1.0
TMの歴史 1999年 2000年 2005年 2009年 2015年 T字形ER TM1.0
TMの歴史 1999年 2000年 2005年 2009年 2015年 T字形ER TM1.0 TM2.0
モデル作成手順
モデル作成の手続き 1. 個体を構成する
モデル作成の手続き 1. 個体を構成する 2. 個体を仕訳する
モデル作成の手続き 1. 個体を構成する 2. 個体を仕訳する 3. 関係を構成する
モデル作成の手続き 1. 個体を構成する 2. 個体を仕訳する 3. 関係を構成する 4. 集合を整える
モデル作成の手続き 1. 個体を構成する 2. 個体を仕訳する 3. 関係を構成する 4. 集合を整える 5.
個体が事実として正しいか調べる
1.個体を構成する • 手順
1.個体を構成する • 手順 1. 情報を仕訳する
1.個体を構成する • 手順 1. 情報を仕訳する 2. 語彙を転記する
1.個体を構成する • 手順 1. 情報を仕訳する 2. 語彙を転記する • 定義
1.個体を構成する • 手順 1. 情報を仕訳する 2. 語彙を転記する • 定義 •
個体である=
1.個体を構成する • 手順 1. 情報を仕訳する 2. 語彙を転記する • 定義 •
個体である=個体指定子が付与されている対象である
情報を仕訳する
情報の例 受注入力 受注番号 受注日 999999999 YYYY/MM/DD 顧客番号 顧客名称 顧客区分 999999999
商品コード 商品名称 商品単価 受注数 XXXXXXX-XXX NNNNNNNNNNNNNN NNNNNNNNNNNNNN 999,999.9 999
仕訳の仕方 • 個体指定子を左に • それ以外を右に
受注入力 受注番号 受注日 999999999 YYYY/MM/DD 顧客番号 顧客名称 顧客区分 999999999 商品コード
商品名称 商品単価 受注数 XXXXXXX-XXX NNNNNNNNNNNNNN NNNNNNNNNNNNNN 999,999.9 999
受注入力 受注番号 受注日 999999999 YYYY/MM/DD 顧客番号 顧客名称 顧客区分 999999999 商品コード
商品名称 商品単価 受注数 XXXXXXX-XXX NNNNNNNNNNNNNN NNNNNNNNNNNNNN 999,999.9 999
仕訳された状態
語彙を転記する
個体指定子を転記して元帳を作る
個体指定子を転記して元帳を作る
語彙を元帳に転記する
語彙を元帳に転記する
2.個体を仕訳する
2.個体を仕訳する • 個体の種類
2.個体を仕訳する • 個体の種類 • event(出来事・行為)
2.個体を仕訳する • 個体の種類 • event(出来事・行為) • resource(行為に関与するもの)
2.個体を仕訳する • 個体の種類 • event(出来事・行為) • resource(行為に関与するもの) • 定義
2.個体を仕訳する • 個体の種類 • event(出来事・行為) • resource(行為に関与するもの) • 定義 •
eventである=
2.個体を仕訳する • 個体の種類 • event(出来事・行為) • resource(行為に関与するもの) • 定義 •
eventである=条件として「日付」が帰属する
2.個体を仕訳する • 個体の種類 • event(出来事・行為) • resource(行為に関与するもの) • 定義 •
eventである=条件として「日付」が帰属する • 全順序集合
2.個体を仕訳する • 個体の種類 • event(出来事・行為) • resource(行為に関与するもの) • 定義 •
eventである=条件として「日付」が帰属する • 全順序集合 • resourceである=
2.個体を仕訳する • 個体の種類 • event(出来事・行為) • resource(行為に関与するもの) • 定義 •
eventである=条件として「日付」が帰属する • 全順序集合 • resourceである=event以外のentityである
2.個体を仕訳する • 個体の種類 • event(出来事・行為) • resource(行為に関与するもの) • 定義 •
eventである=条件として「日付」が帰属する • 全順序集合 • resourceである=event以外のentityである • 半順序集合
個体を仕訳する
個体を仕訳する
個体を仕訳する • 仕訳する=並べる
個体を全順序と半順序に分けて並べる
個体を全順序と半順序に分けて並べる
個体を全順序と半順序に分けて並べる
個体を全順序と半順序に分けて並べる
個体を全順序と半順序に分けて並べる
3.関係を構成する • 種類 1. E-R型
3.関係を構成する • 種類 1. E-R型 2. E-E型
3.関係を構成する • 種類 1. E-R型 2. E-E型 3. R-R型
3.関係を構成する • 種類 1. E-R型 2. E-E型 3. R-R型 4.
再帰
E-R型
E-R型 • 行為者(resource)が、行為・出来事(event)に関与する
E-E型
E-E型 • 出来事(event)の、先行・後続の関係
E-E型
E-E型 • 出来事(event)間の、対応表(onto-mapping)
R-R型
R-R型 • 制約・束縛
R-R型
R-R型 • resource間のevent • 「日付」が帰属、または仮想できる場合、 resource間のeventとして解釈 する
再帰 • resourceの再帰
再帰 • resourceの再帰 • 部品表、カテゴリーなど階層構造を表す
再帰 • eventの再帰
再帰 • eventの再帰 • 赤黒伝票などの消し込み、上書きを表す
4 集合を整える
4 集合を整える • 個体が集合(set)として正しいか調べる
4 集合を整える • 個体が集合(set)として正しいか調べる • セットとサブセット
4 集合を整える • 個体が集合(set)として正しいか調べる • セットとサブセット • 部分集合(区分コード)
4 集合を整える • 個体が集合(set)として正しいか調べる • セットとサブセット • 部分集合(区分コード) • 多値(「OR関係」と「AND関係」)
部分集合 • 部分集合の間に「交わり」はない 集合X x1 x2 x3 x4 x5
部分集合 • 部分集合の間に「交わり」はない 集合X x1 x2 x3 x4 x5
従業員の部分集合 • 従業員区分コード「正社員/パート」 従業員E e1 e2 e3 e4 e5
従業員の部分集合 • 従業員区分コード「正社員/パート」 従業員E e1 e2 e3 e4 e5 正社員
パート
相違のサブセット • 部分集合同士のアトリビュート構成が相違する
相違のサブセット • 部分集合同士のアトリビュート構成が相違する
相違のサブセット • 部分集合同士のアトリビュート構成が相違する
相違のサブセット • 部分集合同士のアトリビュート構成が相違する • この例では福利厚生費の有無が違う
相違のサブセット • 部分集合同士のアトリビュート構成が相違する • この例では福利厚生費の有無が違う 矢印は実装方向を表 す
営業所の部分集合 • 営業所区分コード「国内/海外」 営業所B b1 b2 b3 b4 b5
営業所の部分集合 • 営業所区分コード「国内/海外」 営業所B b1 b2 b3 b4 b5 国内営業所
海外営業所
同一のサブセット • 部分集合同士のアトリビュート構成が同じである
同一のサブセット • 部分集合同士のアトリビュート構成が同じである
部分集合間で「AND関係」が起こる場合 • 取引先コード「請求先/支払先/納入先」 取引先C c7 c8 c5 c6 c3 c1
c2 c4
部分集合間で「AND関係」が起こる場合 • 取引先コード「請求先/支払先/納入先」 取引先C c7 c8 c5 c6 c3 納入先
支払先 c1 c2 c4 請求先
部分集合間で「AND関係」が起こる例 • 集合をこのように切断できない
部分集合間で「AND関係」が起こる場合 • 区分コードをエンティティとして認知し、多対多の関係を作る
ひとつの個体の中に区分コードが複数帰 属している例 • 例)個体に営業所区分コードと、運営形態区分コードが存在する
ひとつの個体の中に区分コードが複数帰 属している例 • 営業所区分コードが上位階になって、運営形態区分コードが下位階になる
ひとつの個体の中に区分コードが複数帰 属している例 • 運営形態区分コードが上位階になって、営業所区分コードが下位階になる
ひとつの個体の中に区分コードが複数帰 属している例 • 上下の階を入れ替えて、意味が通じる場合、どちらかの区分 コードは、そのエンティティに帰属しない
ひとつの個体の中に区分コードが複数帰 属している例 • 上下の階を入れ替えて、意味が通じる場合、どちらかの区分コードは、 そのエンティティに帰属しない • 「そのもの-の」性質(不変的性質)か
ひとつの個体の中に区分コードが複数帰 属している例 • 上下の階を入れ替えて、意味が通じる場合、どちらかの区分コードは、 そのエンティティに帰属しない • 「そのもの-の」性質(不変的性質)か、「-に対する」性質(流動的性質)か
ひとつの個体の中に区分コードが複数帰 属している例 • 上下の階を入れ替えて、意味が通じる場合、どちらかの区分コードは、 そのエンティティに帰属しない • 「そのもの-の」性質(不変的性質)か、「-に対する」性質(流動的性質)か
Nullの除去 共時的 OR関係
Nullの除去 共時的 状態遷移 OR関係
Nullの除去 共時的 状態遷移 OR関係 OR関係
多値のOR関係 非正規形
多値のOR関係 非正規形 正規形 「商品.単価」は、(商品単価が商品に帰属する性質なので)商品番号を継承する
多値のAND関係 • 「event 対 resource」が「複数 対 複数」の時に起こる現象 受注入力 受注番号 受注日
999999999 YYYY/MM/DD 顧客番号 顧客名称 顧客区分 999999999 商品コード 商品名称 商品単価 受注数 XXXXXXX-XXX NNNNNNNNNNNNNN 999,999.9 999 XXXXXXX-XXX NNNNNNNNNNNNNN 999,999.9 999 XXXXXXX-XXX NNNNNNNNNNNNNN 999,999.9 999
多値のAND関係 受注入力 受注番号 受注日 999999999 YYYY/MM/DD 顧客番号 顧客名称 顧客区分 999999999
商品コード 商品名称 商品単価 受注数 XXXXXXX-XXX NNNNNNNNNNNNNN 999,999.9 999 XXXXXXX-XXX NNNNNNNNNNNNNN 999,999.9 999 XXXXXXX-XXX NNNNNNNNNNNNNN 999,999.9 999
多値のAND関係 受注入力 受注番号 受注日 999999999 YYYY/MM/DD 顧客番号 顧客名称 顧客区分 999999999
商品コード 商品名称 商品単価 受注数 XXXXXXX-XXX NNNNNNNNNNNNNN 999,999.9 999 XXXXXXX-XXX NNNNNNNNNNNNNN 999,999.9 999 XXXXXXX-XXX NNNNNNNNNNNNNN 999,999.9 999
多値のAND関係 受注入力 受注番号 受注日 999999999 YYYY/MM/DD 顧客番号 顧客名称 顧客区分 999999999
商品コード 商品名称 商品単価 受注数 XXXXXXX-XXX NNNNNNNNNNNNNN 999,999.9 999 XXXXXXX-XXX NNNNNNNNNNNNNN 999,999.9 999 XXXXXXX-XXX NNNNNNNNNNNNNN 999,999.9 999
多値のAND関係 受注入力 受注番号 受注日 999999999 YYYY/MM/DD 顧客番号 顧客名称 顧客区分 999999999
商品コード 商品名称 商品単価 受注数 XXXXXXX-XXX NNNNNNNNNNNNNN 999,999.9 999 XXXXXXX-XXX NNNNNNNNNNNNNN 999,999.9 999 XXXXXXX-XXX NNNNNNNNNNNNNN 999,999.9 999
多値のAND関係
個体が事実として正しいか調べる • みなしエンティティ
個体が事実として正しいか調べる • みなしエンティティ • スーパーセット
みなしエンティティ
みなしエンティティ • ひとつのresourceのなかに、event的性質が混入している
みなしエンティティ • ひとつのresourceのなかに、event的性質が混入している • ひとつのresourceのなかに、ほかのresource的性質が混入して いる
みなしエンティティ • ひとつのresourceのなかに、event的性質が混入している • ひとつのresourceのなかに、ほかのresource的性質が混入して いる • ひとつのeventのなかに、 resource的性質が混入している
みなしエンティティ • ひとつのresourceのなかに、event的性質が混入している • ひとつのresourceのなかに、ほかのresource的性質が混入して いる • ひとつのeventのなかに、 resource的性質が混入している •
ひとつのeventのなかに、ほかのevent的性質が混入している
みなしエンティティ • ひとつのresourceのなかに、event的性質が混入している
みなしエンティティ • ひとつのresourceのなかに、event的性質が混入している
みなしエンティティ • ひとつのresourceのなかに、event的性質が混入している
みなしエンティティ • ひとつのresourceのなかに、event的性質が混入している
みなしエンティティ • ひとつのresourceのなかに、ほかのresource的性質が混入している
みなしエンティティ • ひとつのresourceのなかに、ほかのresource的性質が混入している
みなしエンティティ • ひとつのresourceのなかに、ほかのresource的性質が混入している
みなしエンティティ • ひとつのresourceのなかに、ほかのresource的性質が混入している
みなしエンティティ • ひとつのeventのなかに、 resource的性質が混入している
みなしエンティティ • ひとつのeventのなかに、 resource的性質が混入している
みなしエンティティ • ひとつのeventのなかに、 resource的性質が混入している
みなしエンティティ • ひとつのeventのなかに、 resource的性質が混入している
みなしエンティティ • ひとつのeventのなかに、ほかのevent的性質が混入している
みなしエンティティ • ひとつのeventのなかに、ほかのevent的性質が混入している
みなしエンティティ • ひとつのeventのなかに、ほかのevent的性質が混入している
みなしエンティティ • ひとつのeventのなかに、ほかのevent的性質が混入している
スーパーセット
スーパーセット • 家族的類似性の高い概念をくくる
スーパーセット • 家族的類似性の高い概念をくくる • 数学的なクラス概念ではない
スーパーセット entityをくくった例
スーパーセット entityをくくった例
スーパーセット entityをくくった例
スーパーセット entityをくくった例
スーパーセット entityをくくった例 アトリビュートをくくった例
スーパーセット entityをくくった例 アトリビュートをくくった例
スーパーセット entityをくくった例 アトリビュートをくくった例
スーパーセット entityをくくった例 アトリビュートをくくった例 定価
スーパーセット entityをくくった例 アトリビュートをくくった例 定価 時価
スーパーセット entityをくくった例 アトリビュートをくくった例 定価 時価
TMの感想
TMの感想 • ルールがシンプルで分かりやすい • 関係がパターン化されているので悩まない • 関係を実体化させているので(対応表、対照表)、新しい関係 を作る時、テーブル定義の変更が要らない • ひとつのエンティティが分割されて実装されている場合、全て
のテーブルで同じキーを継承するのが、実装上便利
キーの継承
キーの継承
TMの学び方
TM2.0の参考書 まだ出版されていませんが、以下で公開されてます • 佐藤正美ホームページ • http://www.sdi-net.co.jp/ • TM2.0の基本的な考え方 • http://www.sdi-net.co.jp/tm2-1.pdf
• TM2.0の技術 • http://www.sdi-net.co.jp/tm2-2.pdf
TMのモデリングツール 製品名 開発者 URL TER-MINE 株式会社アイティーエス http://www.its-mine.jp/ モデビ 株式会社モデビ https://www.modebi.jp/tool/
TMD-Maker 中嶋さん https://ja.osdn.net/projects/tmdmaker/releases/ • 専用のツールはTMの文法にそったモデリングをアシストして くれます
TMのコミュニティ • TMの会 • https://www.tm-net.org/ • 2004年11月に早稲田エクステンションセンターでTMを学んだ有志が集まっ て活動を開始 • 月一で佐藤正美氏を招いて開催
• TMに関する提唱者本人自身の解説を聞いたり質問したり • 土勉会 • 毎週土曜日にTM初心者が書いたER図を経験者がレビューしています
インタビュー記事 • モデルとは何か<第32回IT勉強宴会in東京> • http://blog.benkyoenkai.org/2014/06/32itin.html • データモデリング ~佐藤正美氏、若手エンジニアにデータモデ リングを語る~ •
https://www.sei-info.co.jp/it-keyword/data_modeling.html
完