SlideShare ist ein Scribd-Unternehmen logo
1 von 30
Downloaden Sie, um offline zu lesen
SQLアンチパターン読書会
第10章 サーティワンフレーバー(31のフレーバー)
2013/10/17
ふじもと たかひさ Twitter:@tkfuji

1
アンチパターンの目的
サーティワンフレーバーの目的は列を特定の値に限定
すること。
値リストを列のデータ型や制約の宣言時に行うことで
(値リストにない)無効な文字列の入力を防止でき
る。

2
敬称列の例
値の種類が少ない列、連絡先情報テーブルの敬称
(salutation)列が典型。
31-Flavors/intro/create-table.sql
CREATE TABLE PersonalContacts (
-- 他の列. . .
salutation VARCHAR(4)
CHECK (salutation IN ('Mr.', 'Mrs.', 'Ms.', 'Dr.', 'Rev.')),
);

3
敬称列の例
上司からあなたに与えられたタスク:新しい敬称をサポート
するために連絡先テーブルを変更せよ
敬称(salutation)列の現在の値
Mr. , Mrs. , Ms. , Dr. (博士), Rev. (聖職者)
フランスに支社を開設⇒フランス後の敬称が新たに必要。
M. , Mme, , Mlle. など
来月ブラジルにも支社を開設予定⇒ポルトガル語も必要?
無停止でテーブル定義が修正できるか?

4
バスキン・ロビンス社のサーティワンアイスクリーム
バスキン・ロビンス社が毎月日替わりで違う種類のアイスクリー
ムが食べられる。キャッチフレーズ「31のフレーバー」
現在、21種類の定番フレーバー、12種類のシーズン限定フレー
バー、16種類の地域限定フレーバー、今月のフレーバーと可変
になっている。
(何れも『SQLアンチパターン』の記述から)

5
アンチパターン
アンチパターン:限定する値を列定義で指定する。
有効なデータ値を列の定義時に指定する方法を取る。例えば、
CHECK制約を定義する。CHECK制約により制約条件がFALSE
になる値の挿入や更新を拒否する。
31-Flavors/anti/create-table-check.sql
CREATE TABLE Bugs (
-- 他の列. . .
status VARCHAR(20) CHECK (status IN ('NEW', 'IN PROGRESS', 'FIXED'))
);

6
アンチパターンの実現方法
CHECK制約を用いる。
ENUMと呼ばれる非標準のデータ型を用いる(MySQL固
有?)。
ドメイン(DOMAIN)を用いる。
ユーザー定義型(UDT)を用いる。
許可する値を指定したトリガーを記述する。
⇒上記には共通の短所がある。

7
アンチパターンの短所
シンプルなクエリでは完全なリストを取得できない場
合がある。
31-Flavors/anti/create-table-check.sql
SELECT DISTINCT status FROM Bugs;

⇒全てのバグのステータスがNEWの場合、NEWし
か返って来ない。

8
アンチパターンの短所
メタデータの定義を取得する。MySQLではシステム
ビューinformation_schemaを検索する。
31-Flavors/anti/information-schema.sql
SELECT column_type
FROM information_schema.columns
WHERE table_schema = 'bugtracker_schema'
AND table_name = 'bugs'
AND column_name = 'status';

⇒全てのバグのステータスを含んだ文字列が返って来
る。ENUMで定義した文字列「ENUM('NEW', 'IN PROGRESS',
'FIXED')」をアプリケーションで解析して、値を抽出する。
9
新しいフレーバーの追加
ENUMやCHECK制約で値を追加、削除はできな
い。
31-Flavors/anti/add-enum-value.sql
ALTER TABLE Bugs MODIFY COLUMN status
ENUM('NEW', 'IN PROGRESS', 'FIXED', 'DUPLICATE');

10
アンチパターンは移植が困難
データベース製品間で仕様が異なる。
CHECK制約
ENUM
ドメイン(DOMAIN)
ユーザー定義型(UDT)
トリガー
11
アンチパターンは移植が困難
ふじもと調べ
アンチパターンの対応状況(○:対応、 :非対応)
ANSI
Postgre
SQL 標準
SQL
CHECK制約
ENUM
DOMAIN
UDT

SQL89で
標準化
なし
SQL92で
標準化
SQL99で
標準化

MySQL

Oracle

SQL
Server

DB2
UDB

○

×

○

○

○

○

×

×

×

○

○
×

×

×

×

○

×

○

○

○
12
CHECK制約の実装状況
ふじもと調べ
PostgreSQL
特定の列の値がブーリアン(真の値)の式を満たすように指定できる。列制約またはテーブル制約と
して指定可能。ただし、列制約として定義してもテーブル制約として管理される。
MySQL
なし。「CHECK 条項は、全てのストレージ エンジンに解析されますが、無視されます。」( マニ
ュアルから)
Oracle
特定の列の値がブーリアン(真の値)の式を満たすように指定できる。列制約またはテーブル制約と
して指定可能。
SQL Server
特定の列の値がブーリアン(真の値)の式を満たすように指定できる。列制約またはテーブル制約と
して指定可能。
DB2 UDB
列制約またはテーブル制約として指定可能。チェック条件は2MBのCLOBとして管理。
13
CHECK制約の実装状況
ふじもと調べ
SQL Serverのマニュアルから
「列に格納される値を制御するという点では、CHECK 制約は FOREIGN
KEY 制約に似ています。異なる点は、有効な値を決定する方法です。
FOREIGN KEY 制約では別のテーブルから有効な値の一覧が取得されます
が、CHECK 制約では論理式から有効な値が決定されます。」

⇒CHECK制約(アンチパターン)の代替として
 参照テーブル(解決策)が提示されている。

14
ENUMの実装状況
ふじもと調べ
PostgreSQL
8.3からサポート。CREATE TYPEコマンドで実現。列挙型内の値の順序はその型が作成された時
に値を列挙した順番になる。
MySQL
文字列タイプのひとつ。文字列タイプにはCHAR、VARCHAR、BINARY、VARBINARY、
BLOB、TEXT、ENUM、SETがある。
ENUMはテーブルを作成する際カラム仕様の中で明確に列挙された許容値リストから選択された値を
持つ文字列オブジェクトである。ENUM('one', 'two', 'three') のように1つのENUMは最大
65,535エレメントを持つことができる。
許容値の文字列または1から始まるインデックス値(定義順)で挿入が可能。許容しない値は特別エ
ラー値として空文字(インデックス値は0)が登録される(ストリクトSQLモードを有効にすること
より挿入を禁止することも可能)。NULL値のインデックス値はNULL。
Oracle / SQL Server / DB2 UDB
なし。

15
ドメイン(DOMAIN)の
実装状況 ふじもと調べ
PostgreSQL
CREATE DOMAINコマンドで実現。DEFAULT句、NOT NULL制約、
CHECK制約などを定義する。
CREATE DOMAIN name [ AS ] data_type
[ COLLATE collation ]
[ DEFAULT expression ]
[ constraint [ ... ] ]
constraintは、次のようになります。
[ CONSTRAINT constraint_name ]
{ NOT NULL | NULL | CHECK (expression) }
※ COLLATEは9.1から、CHECKは7.4から

MySQL / Oracle / SQL Server / DB2 UDB
なし。
16
ユーザー定義型( UDT)の
実装状況 ふじもと調べ
PostgreSQL
CREATE TYPEコマンドで実現。定義が面倒。
MySQL
なし。
Oracle
CREATE TYPE文とCREATE TYPE BODY文を使用する。CREATE TYPE BODY文でPL/
SQLを使用して定義する。
SQL Server
CREATE TYPEステートメントを使用する。C#やVBの.NETプログラミング言語で、UDT の作
成の仕様を満たすクラスまたは構造体を作成する。
DB2 UDB
ユーザー定義の構造化タイプ。CREATE DISTINCT TYPEステートメントを使用する。既存のデ
ータ・タイプを基に定義する。UDF(ユーザー定義関数)でUDTの振る舞いを定義する。

17
アンチパターンの見つけ方
「アプリケーションメニューの選択肢を1つ追加するには、データベースを
オフラインにしなければならない。すべてがうまくいけば、30分もかから
ないはずだ」
⇒列の定義時に値が指定されている。サービス中断は本来必要ない。
「status列は、以下の値のうちの1つを持つことができる。このリストの
修正が必要になることは、まずないはずだ」
⇒曖昧な表現。状況が変われば修正が必要になるかも。
「アプリケーションコード側の値リストが、ビジネスルールと同期していな
い。これで何度目だろう」
⇒異なる場所で情報を二重管理していると生じるリスク。

18
アンチパターンを用いてよい場合
有効値の変更が不要だと断言できる場合はアンチパターンを用い
てよい。
例えば、相互排他的な2つの値(左/右、有効/無効、オン/
オフ、内部/外部)を指定する場合など。

19
解決策:限定する値をデータ
で指定する
参照するテーブルBugStatusを作成し、許可する値
をstatus列に格納する。Bugs.statusに
BugStatusを参照する外部キー制約を宣言する。
31-Flavors/soln/create-lookup-table.sql
CREATE TABLE BugStatus (
status VARCHAR(20) PRIMARY KEY
);
INSERT INTO BugStatus (status) VALUES ('NEW'), ('IN PROGRESS'), ('FIXED');
CREATE TABLE Bugs (
-- 他の列. . .
status VARCHAR(20),
FOREIGN KEY (status) REFERENCES BugStatus(status)
ON UPDATE CASCADE
);

20
解決策での値セットの取得
シンプルなクエリで値リストを取得できる。
31-Flavors/soln/query-canonical-values.sql
SELECT status FROM BugStatus ORDER BY status;

⇒全てのバグのステータスがBugsでNEWの場合
 でも全ての値が取得可能。

21
解決策での値追加
INSERT文で値を追加できる。テーブルへのアクセス遮断も不
要。
31-Flavors/soln/insert-value.sql
INSERT INTO BugStatus (status) VALUES ('DUPLICATE');

22
解決策での値削除
Bugsテーブルから参照されている場合、削除できない。
BugStatusにactive列(有効/無効)を追加する。
31-Flavors/soln/inactive.sql
ALTER TABLE BugStatus ADD COLUMN active
ENUM('INACTIVE', 'ACTIVE') NOT NULL DEFAULT 'ACTIVE';

DELETEではなくUPDATEを使う。
31-Flavors/soln/update-inactive.sql
UPDATE BugStatus SET active = 'INACTIVE' WHERE status = 'DUPLICATE';

有効なものだけ検索する。
31-Flavors/soln/select-active.sql
SELECT status FROM BugStatus WHERE active = 'ACTIVE';

23
31のフレーバーなのか?
ふじもと調べ
バスキン・ロビンス社が毎月日替わりで違う種類のアイスクリー
ムが食べられる。キャッチフレーズ「31のフレーバー」
現在、21種類の定番フレーバー、12種類のシーズン限定フレー
バー、16種類の地域限定フレーバー、今月のフレーバーと可変
になっている。(上記は『SQLアンチパターン』の記述から)
⇒(日本)22種類の定番フレーバー、6種類のシーズン限定フレ
ーバー、4種類の今月のフレーバー⇒合計32種類のフレーバー?
⇒(アメリカ)24種類の定番フレーバー、28種類のシーズン限
定フレーバー、5種類のチョイスフレーバー⇒合計57種類のフレ
ーバー?
(それぞれ日本とUSのWebサイトから)
24
31のフレーバーか?
サーティワンアイスクリーム行ってみた

南砂町店(江東区)
32種類でした!4 4(写真) 2
25
バスキン・ロビンス社のサーティワンアイスクリームの
豆知識 ふじもと調べ(Wikipediaを参考)
創業者がバートン・バスキンとアーヴィン・ロビンス。 バートン・バスキンはアーヴィン・ロビンス
の義理の兄(姉の夫)。
アーヴィン・ロビンスの父親がアイスクリーム店を経営し、二人にアイスクリーム店開業を勧める。
その後、その二つの店が合併した。
アメリカでは「バスキン・ロビンス(Baskin-Robbins)」で通じるが、「サーティワン
(thirty-one)」では通じない(thirty-oneの呼称自体無い)。日本と台湾では「サーティワ
ン」で通じるが、「バスキン・ロビンス」では通じにくい。「サーティーワン」ではなく「サーティ
ワン」。
日本ではアメリカのバスキン・ロビンス社日本法人と不二家(各43.27%の出資比率)の合弁会社が
経営。年間売上200億円(平均単価400円として5000万個の売上。1100店として一日当たり
125個の売上)。サーティワンアイスクリームが不二家との合弁であることが知られていないため、
「不二家の期限切れ原材料使用問題」による影響は比較的小さかった。

フレーバーの種類は1000種類以上。フレーバーは世界どこでも大抵32種
類から選べる(高速道路施設などの小規模店は除く)。
26
アンチパターンを31のフレーバーに用
いてはいけない理由 ふじもと考察
1000種類以上の開発済みのフレーバーから32種類のフレーバ
ーが販売される。
今月のフレーバーは月単位で入れ替えあり。
シーズン限定フレーバーは季節単位で入れ替えあり。
定番フレーバーすら入れ替えが想定される。
32種類より少ないフレーバーを販売する店もある。
種別(定番・シーズン限定・今月)も管理したいだろう。

27
31のフレーバーは解決策参照テーブル
で実現するべき

どうやって実現
するかは宿題!
28
31のフレーバーは解決策参照テーブル
で実現するべきヒント(≒答え)
販売明細テーブルにフレーバーを示すカラムがある。これをアンチパターン
(フレーバーを示すカラムに値リストを設定)を用いないで解決する。
1000種類以上の開発済みのフレーバーを管理するフレーバーテーブル。フレー
バー種別カラムを持つ。
地域フレーバーテーブル。地域テーブルとフレーバーテーブルと従属関係にある
子テーブル。年月を主キーとして加える(有効開始年月日でもよい)。
店舗フレーバーテーブル。地域フレーバーテーブルと店舗テーブルと従属関係に
ある子テーブル。年月を主キーとして加える(有効開始年月日でもよい)。
販売明細は地域フレーバーテーブル(通常店の場合)か店舗フレーバーテーブル
(小規模店の場合)と参照関係を持つ。

29
おまけ:SQLデモ
本のサンプルコードを基に ENUMとCHECK制約のアンチパタ
ーンのSQL作成。
本のサンプルコードは実行可能でないものも含まれるため。
http://www.oreilly.co.jp/books/
9784873115894/
PostgreSQLで実行。MySQLは(サンプルコードにある)
CHECK制約が実行できないため。

30

Weitere ähnliche Inhalte

Was ist angesagt?

DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話Koichiro Matsuoka
 
BigQueryの課金、節約しませんか
BigQueryの課金、節約しませんかBigQueryの課金、節約しませんか
BigQueryの課金、節約しませんかRyuji Tamagawa
 
MySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいことMySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいことyoku0825
 
Sqlアンチパターン(メタデータトリブル)
Sqlアンチパターン(メタデータトリブル)Sqlアンチパターン(メタデータトリブル)
Sqlアンチパターン(メタデータトリブル)Tomoaki Uchida
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところY Watanabe
 
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くかDDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くかKoichiro Matsuoka
 
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システムMySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システムKouhei Sutou
 
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜Takahiro Inoue
 
データベース設計徹底指南
データベース設計徹底指南データベース設計徹底指南
データベース設計徹底指南Mikiya Okuno
 
MySQLで論理削除と正しく付き合う方法
MySQLで論理削除と正しく付き合う方法MySQLで論理削除と正しく付き合う方法
MySQLで論理削除と正しく付き合う方法yoku0825
 
SQLチューニング入門 入門編
SQLチューニング入門 入門編SQLチューニング入門 入門編
SQLチューニング入門 入門編Miki Shimogai
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」Takuto Wada
 
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 とPHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 とdo_aki
 
PostgreSQL のイケてるテクニック7選
PostgreSQL のイケてるテクニック7選PostgreSQL のイケてるテクニック7選
PostgreSQL のイケてるテクニック7選Tomoya Kawanishi
 
Django REST Framework における API 実装プラクティス | PyCon JP 2018
Django REST Framework における API 実装プラクティス | PyCon JP 2018Django REST Framework における API 実装プラクティス | PyCon JP 2018
Django REST Framework における API 実装プラクティス | PyCon JP 2018Masashi Shibata
 
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptxネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptxShota Shinogi
 
PHP の GC の話
PHP の GC の話PHP の GC の話
PHP の GC の話y-uti
 
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門増田 亨
 

Was ist angesagt? (20)

DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
 
BigQueryの課金、節約しませんか
BigQueryの課金、節約しませんかBigQueryの課金、節約しませんか
BigQueryの課金、節約しませんか
 
MySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいことMySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいこと
 
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
 
Sqlアンチパターン(メタデータトリブル)
Sqlアンチパターン(メタデータトリブル)Sqlアンチパターン(メタデータトリブル)
Sqlアンチパターン(メタデータトリブル)
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
 
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くかDDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
 
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システムMySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
 
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
 
データベース設計徹底指南
データベース設計徹底指南データベース設計徹底指南
データベース設計徹底指南
 
MySQLで論理削除と正しく付き合う方法
MySQLで論理削除と正しく付き合う方法MySQLで論理削除と正しく付き合う方法
MySQLで論理削除と正しく付き合う方法
 
SQLチューニング入門 入門編
SQLチューニング入門 入門編SQLチューニング入門 入門編
SQLチューニング入門 入門編
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 とPHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
 
PostgreSQL のイケてるテクニック7選
PostgreSQL のイケてるテクニック7選PostgreSQL のイケてるテクニック7選
PostgreSQL のイケてるテクニック7選
 
Django REST Framework における API 実装プラクティス | PyCon JP 2018
Django REST Framework における API 実装プラクティス | PyCon JP 2018Django REST Framework における API 実装プラクティス | PyCon JP 2018
Django REST Framework における API 実装プラクティス | PyCon JP 2018
 
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。 【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
 
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptxネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
 
PHP の GC の話
PHP の GC の話PHP の GC の話
PHP の GC の話
 
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
 

Andere mochten auch

ファントムファイル
ファントムファイルファントムファイル
ファントムファイルAkura Pi
 
SQLアンチパターン読書会 「スパゲッティクエリ」
SQLアンチパターン読書会 「スパゲッティクエリ」SQLアンチパターン読書会 「スパゲッティクエリ」
SQLアンチパターン読書会 「スパゲッティクエリ」makopi 23
 
DBパフォーマンスチューニングの基礎:インデックス入門
DBパフォーマンスチューニングの基礎:インデックス入門DBパフォーマンスチューニングの基礎:インデックス入門
DBパフォーマンスチューニングの基礎:インデックス入門Akira Shimosako
 
SQLアンチパターン読書会 4章 キーレスエンエントリ(外部キー嫌い)
SQLアンチパターン読書会 4章 キーレスエンエントリ(外部キー嫌い)SQLアンチパターン読書会 4章 キーレスエンエントリ(外部キー嫌い)
SQLアンチパターン読書会 4章 キーレスエンエントリ(外部キー嫌い)makopi 23
 
Ruby用REST APIクライアントの紹介 20150829
Ruby用REST APIクライアントの紹介 20150829Ruby用REST APIクライアントの紹介 20150829
Ruby用REST APIクライアントの紹介 20150829Rikiya Kawakami
 
SQLアンチパターン~ファントムファイル
SQLアンチパターン~ファントムファイルSQLアンチパターン~ファントムファイル
SQLアンチパターン~ファントムファイルItabashi Masayuki
 
SQLアンチパターン~スパゲッティクエリ
SQLアンチパターン~スパゲッティクエリSQLアンチパターン~スパゲッティクエリ
SQLアンチパターン~スパゲッティクエリItabashi Masayuki
 
Postgre sql9.3新機能 (OSC hiroshima 2013)
Postgre sql9.3新機能 (OSC hiroshima 2013)Postgre sql9.3新機能 (OSC hiroshima 2013)
Postgre sql9.3新機能 (OSC hiroshima 2013)Soudai Sone
 
フィア・オブ・ジ・アンノウン
フィア・オブ・ジ・アンノウンフィア・オブ・ジ・アンノウン
フィア・オブ・ジ・アンノウンAkura Pi
 
LibreOffice を Windows 上でビルドする UPDATE2
LibreOffice を Windows 上でビルドする UPDATE2LibreOffice を Windows 上でビルドする UPDATE2
LibreOffice を Windows 上でビルドする UPDATE2Tomofumi Yagi
 
Firebird.performance.testing
Firebird.performance.testingFirebird.performance.testing
Firebird.performance.testingMind The Firebird
 
High-load performance testing: Firebird 2.5, 3.0, 4.0
High-load performance testing:  Firebird 2.5, 3.0, 4.0High-load performance testing:  Firebird 2.5, 3.0, 4.0
High-load performance testing: Firebird 2.5, 3.0, 4.0Alexey Kovyazin
 
アクセスプラン(実行計画)の読み方入門
アクセスプラン(実行計画)の読み方入門アクセスプラン(実行計画)の読み方入門
アクセスプラン(実行計画)の読み方入門Akira Shimosako
 
Postgre sqlから見るnosql
Postgre sqlから見るnosqlPostgre sqlから見るnosql
Postgre sqlから見るnosqlSoudai Sone
 
qpstudy 2013.07 NoSQL
qpstudy 2013.07 NoSQLqpstudy 2013.07 NoSQL
qpstudy 2013.07 NoSQLAkihiro Okuno
 
35歳でDBAになった私がデータベースを壊して学んだこと
35歳でDBAになった私がデータベースを壊して学んだこと35歳でDBAになった私がデータベースを壊して学んだこと
35歳でDBAになった私がデータベースを壊して学んだことShinnosuke Akita
 
おじさん二人が語る OOW デビューのススメ! Oracle OpenWorld 2016参加報告 [検閲版] 株式会社コーソル 杉本 篤信, 河野 敏彦
おじさん二人が語る OOW デビューのススメ! Oracle OpenWorld 2016参加報告 [検閲版] 株式会社コーソル 杉本 篤信, 河野 敏彦 おじさん二人が語る OOW デビューのススメ! Oracle OpenWorld 2016参加報告 [検閲版] 株式会社コーソル 杉本 篤信, 河野 敏彦
おじさん二人が語る OOW デビューのススメ! Oracle OpenWorld 2016参加報告 [検閲版] 株式会社コーソル 杉本 篤信, 河野 敏彦 CO-Sol for Community
 

Andere mochten auch (20)

ファントムファイル
ファントムファイルファントムファイル
ファントムファイル
 
SQLアンチパターン読書会 「スパゲッティクエリ」
SQLアンチパターン読書会 「スパゲッティクエリ」SQLアンチパターン読書会 「スパゲッティクエリ」
SQLアンチパターン読書会 「スパゲッティクエリ」
 
DBパフォーマンスチューニングの基礎:インデックス入門
DBパフォーマンスチューニングの基礎:インデックス入門DBパフォーマンスチューニングの基礎:インデックス入門
DBパフォーマンスチューニングの基礎:インデックス入門
 
SQLアンチパターン読書会 4章 キーレスエンエントリ(外部キー嫌い)
SQLアンチパターン読書会 4章 キーレスエンエントリ(外部キー嫌い)SQLアンチパターン読書会 4章 キーレスエンエントリ(外部キー嫌い)
SQLアンチパターン読書会 4章 キーレスエンエントリ(外部キー嫌い)
 
Ruby用REST APIクライアントの紹介 20150829
Ruby用REST APIクライアントの紹介 20150829Ruby用REST APIクライアントの紹介 20150829
Ruby用REST APIクライアントの紹介 20150829
 
SQLアンチパターン~ファントムファイル
SQLアンチパターン~ファントムファイルSQLアンチパターン~ファントムファイル
SQLアンチパターン~ファントムファイル
 
SQLアンチパターン~スパゲッティクエリ
SQLアンチパターン~スパゲッティクエリSQLアンチパターン~スパゲッティクエリ
SQLアンチパターン~スパゲッティクエリ
 
Postgre sql9.3新機能 (OSC hiroshima 2013)
Postgre sql9.3新機能 (OSC hiroshima 2013)Postgre sql9.3新機能 (OSC hiroshima 2013)
Postgre sql9.3新機能 (OSC hiroshima 2013)
 
フィア・オブ・ジ・アンノウン
フィア・オブ・ジ・アンノウンフィア・オブ・ジ・アンノウン
フィア・オブ・ジ・アンノウン
 
LibreOffice を Windows 上でビルドする UPDATE2
LibreOffice を Windows 上でビルドする UPDATE2LibreOffice を Windows 上でビルドする UPDATE2
LibreOffice を Windows 上でビルドする UPDATE2
 
Firebird.performance.testing
Firebird.performance.testingFirebird.performance.testing
Firebird.performance.testing
 
Firebirdの障害対策
Firebirdの障害対策Firebirdの障害対策
Firebirdの障害対策
 
Wtm
WtmWtm
Wtm
 
描ける!ER図
描ける!ER図描ける!ER図
描ける!ER図
 
High-load performance testing: Firebird 2.5, 3.0, 4.0
High-load performance testing:  Firebird 2.5, 3.0, 4.0High-load performance testing:  Firebird 2.5, 3.0, 4.0
High-load performance testing: Firebird 2.5, 3.0, 4.0
 
アクセスプラン(実行計画)の読み方入門
アクセスプラン(実行計画)の読み方入門アクセスプラン(実行計画)の読み方入門
アクセスプラン(実行計画)の読み方入門
 
Postgre sqlから見るnosql
Postgre sqlから見るnosqlPostgre sqlから見るnosql
Postgre sqlから見るnosql
 
qpstudy 2013.07 NoSQL
qpstudy 2013.07 NoSQLqpstudy 2013.07 NoSQL
qpstudy 2013.07 NoSQL
 
35歳でDBAになった私がデータベースを壊して学んだこと
35歳でDBAになった私がデータベースを壊して学んだこと35歳でDBAになった私がデータベースを壊して学んだこと
35歳でDBAになった私がデータベースを壊して学んだこと
 
おじさん二人が語る OOW デビューのススメ! Oracle OpenWorld 2016参加報告 [検閲版] 株式会社コーソル 杉本 篤信, 河野 敏彦
おじさん二人が語る OOW デビューのススメ! Oracle OpenWorld 2016参加報告 [検閲版] 株式会社コーソル 杉本 篤信, 河野 敏彦 おじさん二人が語る OOW デビューのススメ! Oracle OpenWorld 2016参加報告 [検閲版] 株式会社コーソル 杉本 篤信, 河野 敏彦
おじさん二人が語る OOW デビューのススメ! Oracle OpenWorld 2016参加報告 [検閲版] 株式会社コーソル 杉本 篤信, 河野 敏彦
 

Kürzlich hochgeladen

My Inspire High Award 2024  「正義って存在するの?」
My Inspire High Award 2024  「正義って存在するの?」My Inspire High Award 2024  「正義って存在するの?」
My Inspire High Award 2024  「正義って存在するの?」inspirehighstaff03
 
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」inspirehighstaff03
 
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライドリアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライドKen Fukui
 
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライドリアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライドKen Fukui
 
My Inspire High Award 2024 「AIと仲良くなるには?」
My Inspire High Award 2024 「AIと仲良くなるには?」My Inspire High Award 2024 「AIと仲良くなるには?」
My Inspire High Award 2024 「AIと仲良くなるには?」inspirehighstaff03
 
My Inspire High Award 2024「他者と自分、対立を防ぐには?」
My Inspire High Award 2024「他者と自分、対立を防ぐには?」My Inspire High Award 2024「他者と自分、対立を防ぐには?」
My Inspire High Award 2024「他者と自分、対立を防ぐには?」inspirehighstaff03
 
TEAMIN Service overview for customer_20240422.pdf
TEAMIN Service overview for customer_20240422.pdfTEAMIN Service overview for customer_20240422.pdf
TEAMIN Service overview for customer_20240422.pdfyukisuga3
 
リアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライド
リアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライドリアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライド
リアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライドKen Fukui
 
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdf
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdfMy Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdf
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdfinspirehighstaff03
 
My Inspire High Award 2024 「本当の『悪者』って何?」
My Inspire High Award 2024 「本当の『悪者』って何?」My Inspire High Award 2024 「本当の『悪者』って何?」
My Inspire High Award 2024 「本当の『悪者』って何?」inspirehighstaff03
 
Divorce agreements in administrative work.pdf
Divorce agreements in administrative work.pdfDivorce agreements in administrative work.pdf
Divorce agreements in administrative work.pdfoganekyokoi
 
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」inspirehighstaff03
 
My Inspire High Award 2024「なぜ議会への関心が低いのか?」
My Inspire High Award 2024「なぜ議会への関心が低いのか?」My Inspire High Award 2024「なぜ議会への関心が低いのか?」
My Inspire High Award 2024「なぜ議会への関心が低いのか?」inspirehighstaff03
 
Establishment and operation of medical corporations.pdf
Establishment and operation of medical corporations.pdfEstablishment and operation of medical corporations.pdf
Establishment and operation of medical corporations.pdfoganekyokoi
 
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライドリアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライドKen Fukui
 
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」inspirehighstaff03
 
My Inspire High Award 2024    「孤独は敵なのか?」
My Inspire High Award 2024    「孤独は敵なのか?」My Inspire High Award 2024    「孤独は敵なのか?」
My Inspire High Award 2024    「孤独は敵なのか?」inspirehighstaff03
 
My Inspire High Award 2024「老いることは不幸なこと?」
My Inspire High Award 2024「老いることは不幸なこと?」My Inspire High Award 2024「老いることは不幸なこと?」
My Inspire High Award 2024「老いることは不幸なこと?」inspirehighstaff03
 
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」inspirehighstaff03
 
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slidessusere0a682
 

Kürzlich hochgeladen (20)

My Inspire High Award 2024  「正義って存在するの?」
My Inspire High Award 2024  「正義って存在するの?」My Inspire High Award 2024  「正義って存在するの?」
My Inspire High Award 2024  「正義って存在するの?」
 
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
 
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライドリアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
 
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライドリアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
 
My Inspire High Award 2024 「AIと仲良くなるには?」
My Inspire High Award 2024 「AIと仲良くなるには?」My Inspire High Award 2024 「AIと仲良くなるには?」
My Inspire High Award 2024 「AIと仲良くなるには?」
 
My Inspire High Award 2024「他者と自分、対立を防ぐには?」
My Inspire High Award 2024「他者と自分、対立を防ぐには?」My Inspire High Award 2024「他者と自分、対立を防ぐには?」
My Inspire High Award 2024「他者と自分、対立を防ぐには?」
 
TEAMIN Service overview for customer_20240422.pdf
TEAMIN Service overview for customer_20240422.pdfTEAMIN Service overview for customer_20240422.pdf
TEAMIN Service overview for customer_20240422.pdf
 
リアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライド
リアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライドリアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライド
リアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライド
 
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdf
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdfMy Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdf
My Inspire High Award 2024「Yakushima Islandってなんか変じゃない?」.pdf
 
My Inspire High Award 2024 「本当の『悪者』って何?」
My Inspire High Award 2024 「本当の『悪者』って何?」My Inspire High Award 2024 「本当の『悪者』って何?」
My Inspire High Award 2024 「本当の『悪者』って何?」
 
Divorce agreements in administrative work.pdf
Divorce agreements in administrative work.pdfDivorce agreements in administrative work.pdf
Divorce agreements in administrative work.pdf
 
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」
 
My Inspire High Award 2024「なぜ議会への関心が低いのか?」
My Inspire High Award 2024「なぜ議会への関心が低いのか?」My Inspire High Award 2024「なぜ議会への関心が低いのか?」
My Inspire High Award 2024「なぜ議会への関心が低いのか?」
 
Establishment and operation of medical corporations.pdf
Establishment and operation of medical corporations.pdfEstablishment and operation of medical corporations.pdf
Establishment and operation of medical corporations.pdf
 
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライドリアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
 
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」
 
My Inspire High Award 2024    「孤独は敵なのか?」
My Inspire High Award 2024    「孤独は敵なのか?」My Inspire High Award 2024    「孤独は敵なのか?」
My Inspire High Award 2024    「孤独は敵なのか?」
 
My Inspire High Award 2024「老いることは不幸なこと?」
My Inspire High Award 2024「老いることは不幸なこと?」My Inspire High Award 2024「老いることは不幸なこと?」
My Inspire High Award 2024「老いることは不幸なこと?」
 
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
 
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
【ゲーム理論入門】ChatGPTが作成した ゲーム理論の問題を解く #3 Slide
 

SQLアンチパターン読書会 第10章 サーティワンフレーバー