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
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
suno88
PDF, PPTX
3,077 views
もうひとつのアンチパターン OTLT、あるいは如何にして私はオレオレフレームワークを忌み嫌うようになったか
2018/1/27 開催「『SQL アンチパターン』読書会スペシャル」(NSEG #96)での発表資料
Technology
◦
Read more
1
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 32
2
/ 32
3
/ 32
4
/ 32
5
/ 32
6
/ 32
7
/ 32
8
/ 32
9
/ 32
10
/ 32
Most read
11
/ 32
12
/ 32
13
/ 32
14
/ 32
15
/ 32
16
/ 32
17
/ 32
Most read
18
/ 32
19
/ 32
20
/ 32
Most read
21
/ 32
22
/ 32
23
/ 32
24
/ 32
25
/ 32
26
/ 32
27
/ 32
28
/ 32
29
/ 32
30
/ 32
31
/ 32
32
/ 32
More Related Content
PDF
ドメイン駆動設計の正しい歩き方
by
増田 亨
PPTX
世界一わかりやすいClean Architecture
by
Atsushi Nakamura
PDF
ソフトウェア開発における『知の高速道路』
by
Yoshitaka Kawashima
PDF
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
by
Yoshitaka Kawashima
PDF
ドメイン駆動設計のためのオブジェクト指向入門
by
増田 亨
PDF
日本語テストメソッドについて
by
kumake
PDF
リッチなドメインモデル 名前探し
by
増田 亨
PDF
エキスパートPythonプログラミング改訂3版の読みどころ
by
Takayuki Shimizukawa
ドメイン駆動設計の正しい歩き方
by
増田 亨
世界一わかりやすいClean Architecture
by
Atsushi Nakamura
ソフトウェア開発における『知の高速道路』
by
Yoshitaka Kawashima
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
by
Yoshitaka Kawashima
ドメイン駆動設計のためのオブジェクト指向入門
by
増田 亨
日本語テストメソッドについて
by
kumake
リッチなドメインモデル 名前探し
by
増田 亨
エキスパートPythonプログラミング改訂3版の読みどころ
by
Takayuki Shimizukawa
What's hot
PDF
ドメイン駆動設計サンプルコードの徹底解説
by
増田 亨
PDF
ドメイン駆動設計 ( DDD ) をやってみよう
by
増田 亨
KEY
やはりお前らのMVCは間違っている
by
Koichi Tanaka
PDF
ドメイン駆動設計 本格入門
by
増田 亨
PDF
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
by
増田 亨
PDF
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
by
Koichiro Matsuoka
PDF
3週連続DDDその2 深いモデルの探求(ドメイン駆動設計 第3部)
by
増田 亨
PDF
実践的な設計って、なんだろう?
by
増田 亨
PDF
ソフトウェア開発のやり方の改善
by
増田 亨
PPTX
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
by
Tokoroten Nakayama
PDF
アジャイルにモデリングは必要か
by
Hiromasa Oka
PDF
3週連続DDDその1 ドメイン駆動設計の基本を理解する
by
増田 亨
PDF
ドメイン駆動設計という仕事の流儀
by
増田 亨
PDF
分散システムの限界について知ろう
by
Shingo Omura
PDF
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
by
Koichiro Matsuoka
PDF
テスト文字列に「うんこ」と入れるな
by
Kentaro Matsui
PDF
RESTful Web アプリの設計レビューの話
by
Takuto Wada
PDF
条件分岐とcmovとmaxps
by
MITSUNARI Shigeo
PDF
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
by
Koichiro Matsuoka
PDF
ROSでつながるVRChat
by
Hirokazu Onomichi
ドメイン駆動設計サンプルコードの徹底解説
by
増田 亨
ドメイン駆動設計 ( DDD ) をやってみよう
by
増田 亨
やはりお前らのMVCは間違っている
by
Koichi Tanaka
ドメイン駆動設計 本格入門
by
増田 亨
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
by
増田 亨
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
by
Koichiro Matsuoka
3週連続DDDその2 深いモデルの探求(ドメイン駆動設計 第3部)
by
増田 亨
実践的な設計って、なんだろう?
by
増田 亨
ソフトウェア開発のやり方の改善
by
増田 亨
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
by
Tokoroten Nakayama
アジャイルにモデリングは必要か
by
Hiromasa Oka
3週連続DDDその1 ドメイン駆動設計の基本を理解する
by
増田 亨
ドメイン駆動設計という仕事の流儀
by
増田 亨
分散システムの限界について知ろう
by
Shingo Omura
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
by
Koichiro Matsuoka
テスト文字列に「うんこ」と入れるな
by
Kentaro Matsui
RESTful Web アプリの設計レビューの話
by
Takuto Wada
条件分岐とcmovとmaxps
by
MITSUNARI Shigeo
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
by
Koichiro Matsuoka
ROSでつながるVRChat
by
Hirokazu Onomichi
More from suno88
PDF
Javascript で暗号化
by
suno88
PDF
HTML と CSS の社内勉強会を主催した話
by
suno88
PDF
AWS で社内オンライン勉強会
by
suno88
PDF
ITでみんなを幸せに、ITで自分も幸せに
by
suno88
PDF
NetBeans、FuelPHP と過ごしたこの 2 ヶ月
by
suno88
PDF
初心者向け SQLite の始め方
by
suno88
PDF
8bit 時代のプログラミング事情を訪ねて
by
suno88
PDF
ねえ、お父さんのお仕事ってなぁに?
by
suno88
PDF
NSEG 勉強会 二周年に寄せて
by
suno88
PDF
NSEG のこれまでとこれから
by
suno88
PDF
山椒は小粒でぴりりと辛い
by
suno88
PDF
ソフトウェアエンジニアに必要な法律・契約のお話
by
suno88
PDF
「交通勉強会 ~Trafficonf ~」発足に寄せて
by
suno88
PDF
Windows azure
by
suno88
PDF
続・ねえ、お父さんのお仕事ってなぁに?
by
suno88
PDF
Cloud
by
suno88
Javascript で暗号化
by
suno88
HTML と CSS の社内勉強会を主催した話
by
suno88
AWS で社内オンライン勉強会
by
suno88
ITでみんなを幸せに、ITで自分も幸せに
by
suno88
NetBeans、FuelPHP と過ごしたこの 2 ヶ月
by
suno88
初心者向け SQLite の始め方
by
suno88
8bit 時代のプログラミング事情を訪ねて
by
suno88
ねえ、お父さんのお仕事ってなぁに?
by
suno88
NSEG 勉強会 二周年に寄せて
by
suno88
NSEG のこれまでとこれから
by
suno88
山椒は小粒でぴりりと辛い
by
suno88
ソフトウェアエンジニアに必要な法律・契約のお話
by
suno88
「交通勉強会 ~Trafficonf ~」発足に寄せて
by
suno88
Windows azure
by
suno88
続・ねえ、お父さんのお仕事ってなぁに?
by
suno88
Cloud
by
suno88
Recently uploaded
PDF
TomokaEdakawa_職種と講義の関係推定に基づく履修支援システムの基礎検討_HCI2026
by
Matsushita Laboratory
PDF
maisugimoto_曖昧さを含む仕様書の改善を目的としたアノテーション支援ツールの検討_HCI2025.pdf
by
Matsushita Laboratory
PDF
20260119_VIoTLT_vol22_kitazaki_v1___.pdf
by
Ayachika Kitazaki
PDF
自転車ユーザ参加型路面画像センシングによる点字ブロック検出における性能向上方法の模索 (20260123 SeMI研)
by
Yuto Matsuda
PDF
アジャイル導入が止まる3つの壁 ─ 文化・他部門・組織プロセスをどう乗り越えるか
by
Graat(グラーツ)
PDF
ST2024_PM1_2_Case_study_of_local_newspaper_company.pdf
by
akipii ogaoga
PDF
Team Topology Adaptive Organizational Design for Rapid Delivery of Valuable S...
by
akipii ogaoga
TomokaEdakawa_職種と講義の関係推定に基づく履修支援システムの基礎検討_HCI2026
by
Matsushita Laboratory
maisugimoto_曖昧さを含む仕様書の改善を目的としたアノテーション支援ツールの検討_HCI2025.pdf
by
Matsushita Laboratory
20260119_VIoTLT_vol22_kitazaki_v1___.pdf
by
Ayachika Kitazaki
自転車ユーザ参加型路面画像センシングによる点字ブロック検出における性能向上方法の模索 (20260123 SeMI研)
by
Yuto Matsuda
アジャイル導入が止まる3つの壁 ─ 文化・他部門・組織プロセスをどう乗り越えるか
by
Graat(グラーツ)
ST2024_PM1_2_Case_study_of_local_newspaper_company.pdf
by
akipii ogaoga
Team Topology Adaptive Organizational Design for Rapid Delivery of Valuable S...
by
akipii ogaoga
もうひとつのアンチパターン OTLT、あるいは如何にして私はオレオレフレームワークを忌み嫌うようになったか
1.
もうひとつのアンチパターン OTLT、あるいは如何にして私は オレオレフレームワークを 忌み嫌うようになったか 2018.01.27(Sat) 『SQLアンチパターン』読書会スペシャル (NSEG 勉強会 #96)
@ GEEKLAB.NAGANO
2.
自己紹介 ● 春原 宏保 (すのはら
ひろやす) ● 3案件を回すフリーランスプログラマー ● PHP + MariaDB (週4日常駐) ● C# + SQL Azure (受託) ● Delphi + SQLite (受託) ● 長野市在住、しかし平日は新宿区住まい ● 苦手なモノ: テストコードを書くこと
5.
閑話休題
6.
こんなテーブル、見たことある? ● コードとその値のペアをテーブルに持ちたい ● 都道府県コードと都道府県名 ● 性別コードと性別名 ●
電話番号種別と電話番号 ● etc…
7.
code name 1 北海道 2
青森県 3 岩手県 4 宮城県 5 秋田県 prefectures code name 1 男性 2 女性 3 法人 4 未回答 genders code name 1 固定電話 2 携帯電話 3 FAX telephone_types
8.
似たようなテーブルが増殖する ● 「コードとその値のペア」という構造は それぞれのテーブルで同じ ● ならば統合しちゃえばラクじゃない? こんなテーブルが爆誕する
9.
code_type code name pref
1 北海道 pref 2 青森県 pref 3 岩手県 pref 4 宮城県 : : : gender 1 男性 gender 2 女性 : : : telephone 1 固定電話 telephone 2 携帯電話 コードタイプ コード値 内容
10.
人呼んで「One True Lookup
Table」 ● よく言えばKey-Value Store ● テーブル数が減ってスッキリ! ● ER図もごちゃつかない! ● 新しいコード体系が加わってもテーブルを 増やす必要がない! ● 情報が集約されていて便利! ● SIer、もしくはSIer出身の技術者が好んで 使うイメージ (※個人の感想です)
11.
code_type code name pref
1 北海道 pref 2 青森県 pref 3 岩手県 pref 4 宮城県 : : : gender 1 男性 gender 2 女性 : : : telephone 1 固定電話 telephone 2 携帯電話 あんまりSIerの臭いがしない? ならば──
12.
kbn kbn_cd kbn_name pref
01 北海道 pref 02 青森県 pref 03 岩手県 pref 04 宮城県 : : : gender 1 男性 gender 2 女性 : : : telephone 1 固定電話 telephone 2 携帯電話 これで一気にSIer風味に!!
13.
テーブル設計のポイント ● kbnは適度な大きさの文字列型で ● kbn_cdは必要十分な大きさの文字列型で ● コード値として文字列を持つコード体系の データが加わる可能性があるため ● コード値が数字であるコード体系のデータは ゼロパディングする
(例: 都道府県コード) ● kbn_nameももちろん文字列型で
14.
いずれテーブル定義の変更が必要に kbn kbn_cd kbn_name error
E01495678B01 予期しないエラーが 発生しました。カス タマーサポートに連 絡してください。 想定より長い kbn_cdが 現れた!
15.
いずれテーブル定義の変更が必要に kbn kbn_cd sub_kbn_cd
kbn_name office japan nagano 長野本社 office japan matsumoto 松本本社 office japan hakuba 白馬支社 office japan karuizawa 軽井沢営業所 区分値の 下位要素が 追加に!
16.
ほかにも問題山積 ● kbn_cdの制約を設定できない ● 例えばvarchar(5)だとして、都道府県コードの 正しい書式は次のどれ? (
_ は空白) • 01___ • _1___ • 1 • 01 ● kbn_cdの定義がvarchar(10)に変更されたら、 都道府県コードの書式も変える? バグの元!!
17.
ほかにも問題山積 ● kbnの重複登録の危険性 ● genderというkbnがあることに気づかず kbn =
sexのデータを投入するとか ● errorというkbnがあることに気づかず kbn = messagesのデータを投入するとか ● こういうミスをなくすため、kbnの管理を エクセル・ホーガン氏に依頼
18.
ほかにも問題山積 ● 数値を返してほしい時でもvarchar ● kbn_nameがvarcharなので仕方ない ● 同じ値でも「1.0」「1」「+1.00」など複数の 書式で格納されうるのがキモい
19.
私の携わったプロジェクトでは── ● 設計時点においてOTLTありき ● ほかのプロジェクトでもそうやってきた ● 値が何でもかんでも文字列で返ってくるのが 気に入らない (Java
1.4でした) 実はそんなことは問題ではなかった
20.
ここにも現れるエクセル・ホーガン氏 ● テーブル定義書からDAOやJavaBeansを 自動生成するExcelマクロ ● 生成されるソースを見ると、オブジェクト 指向を理解していない人が作ったのは明らか ● それもバグ持ちで、特定のメソッドの返り値が おかしい →知らずに使っていてしばらく悩んだが、 上司に相談したら「あ、それバグだよ」 ●
しかもそのツールの名前が「Mr. Bean」 ● ○ねとか思う
21.
素晴らしきかな、Mr. Bean ● データベースのカラムの型にかかわらず 返り値はString型 ● OTLTとかどうとかに関係ない ●
受け取った値をJava側でその都度型変換 ● データ登録時も当然Stringで渡す ● 二度○ねとか思う
22.
そもそもの問題は ● 「同一種類のデータの集合をひとつの テーブルにまとめる」という関係モデルの 原理に反する設計である ● 生まれた時から設計ミス ● 『SQLアンチパターン』の「EAV(5章)」や 「ポリモーフィック関連(6章)」にも似た きな臭さを感じる
23.
さらに知りたい方は ● データベース技術者のミックさんの記事 gihyo.jp: SQLアタマアカデミー 第3回 「テーブル設計のグレーゾーン~毒と薬は 紙一重(1)
単一参照テーブル~ テーブルにポリモフィズムは必要か」 http://gihyo.jp/dev/serial/01/sql_academy2/000301
24.
アンチパターンの見つけ方 以下のような会話を耳にしたら(ry ● 「都道府県コードの区分名、何だっけ?」 ● 「区分値って、何文字まで入る?」 ● 「区分値の階層っていくつだっけ? 3階層の 区分値って持てる?」
25.
アンチパターンを用いてもよい場合 ● あなたが正社員であり、 ● 上司やプロジェクトリーダーが元COBOLer (もしくはそういう人から教育を受けた人)で あり、 ● 正しい設計を啓蒙することで貴方の職が 危ぶまれることが予想される場合
26.
反論?
27.
でもやっぱり ER図が見にくい…… ● 貴方の仕事はER図を眺めてニヤニヤする ことですか? ● 実装しやすく不具合の起きにくいデータ構造を 作るのが第一でしょうに ● kbnの更新はちゃんとできるの? ●
そもそもER図の更新なんてしてるの?
28.
テーブルが多いと SQLが遅くならない? ● なりません。 ● ちゃんとインデックスを張りさえすれば ● 不安に思うのなら計測しましょう
29.
DAOをたくさん作りたく ないから、テーブルは少ない ほうがいいなあ…… ● Javaの方ですか? ● そもそもどうしてDAOなんて作るんですか。す べてのテーブルにいちいちゲッターだのセッ ターだのfindByFooBar()だのと、使うかどうかも 分からないメソッドやフィールドを作りまくっ て保守性を下げて何が嬉しいんですか。何も考 えずにDAOだのJavaBeansだのを作るのと、何 も考えずにOTLTを作るのと、本質的に何が違う んですか。思考停止じゃありませんか。そんな
30.
Eclipseなら、コマンド一発で DAOを自動生成できるよ? (・∀・) カエレ! _ /- イ、_
__ /: : : : : : : : : : : ( 〈〈〈〈 ヽ /: : : : ::;:;: ;: ;:;: ; : : : ::ゝ 〈⊃ } {:: : : :ノ --‐' 、_\: : ::} ∩___∩ | | {:: : :ノ ,_;:;:;ノ、 ェェ ヾ: :::} | ノ ヽ ! ! 、 l: :ノ /二―-、 |: ::ノ / ● ● | / ,,・_ | //  ̄7/ /::ノ | ( _●_) ミ/ , ’,∴ ・ ¨ 〉(_二─-┘{/ 彡、 |∪| / 、・∵ ’ /、//|  ̄ ̄ヽ / __ ヽノ / / // |//\ 〉 (___) / / // /\ /
32.
結論 ● 清く正しいテーブル設計をしましょう ● 長い目で見れば正しい設計は貴方を 救います ● 旧態依然のSIerは爆発しろ ● オレオレフレームワークも○ね
Download