SlideShare uma empresa Scribd logo
1 de 12
Baixar para ler offline
ドメインの話
LTDD #15
@tsuda_ahr
ドメインというと色々ありますが…
今回のドメインは、www.servername.com 、的なやつじゃないです。
昨年、某DB勉強会のハンズオンで、こんな ER 図を書きましたが
列名の命名方法で質問があったんですね。
なぜ「file_size」なのか。
「Size」じゃないのか?
ドメイン(定義域)という考え方がありまして。
 列名はオブジェクト指向のプロパティやフィールドとはちょっと違う感じ。
 列名 = 型、に近い。
 この「型」のようなものを「ドメイン名」と呼ぶ。
ドメイン名の利点1: 自然結合
 普通に結合
select * from TABLE_A inner join TABLE_B
on TABLE_A.key1 = TABLE_B.key1;
 こう書ける
select * from TABLE_A natural join TABLE_B;
つまり
 普通の結合の場合は、結合する列の対応を記述しないといけない。
 自然結合の場合は、同名の列名は結合の対象と自動で判断する。
 記述量が減るので、ちょっと便利。
 ただ、自然結合は、同名の列名すべてと JOIN するので使いづらい場合が多い。
ドメイン名の利点2: 自然結合を使わない場合でも!
 同名の列は「結合の条件となり得る」と判断できる。
 逆に、列名が違うもの同士の結合は結合してはならない、という暗黙の了解(=規約)を得るこ
とができる。
(オブジェクト指向でいう「型の違う代入」と同等)
 こちらの利点が主力。
利点2の場合は、実は別の方法もある
 create domain 文
本当にデータ型を作る
-- PostgreSQL の例
create domain file_size as numeric(12);
create table TABLE_A(
key1 as varchar(10),
size as file_size
);
-- Oracle にはない模様
create domain の利点と欠点
 型名(ドメイン名)による、列の生成が可能となる。
→命名規約というあやふやなものに依存しなくて済む。
 他方、ドメイン名に頼って列名を自在に命名すると、自然結合が効かなくなる。
 結合列の是非も列名からだけでは判定できないので、SQLの組立てが難しくなる場合が多い。
(ハンガリアン記法みたいですね)
まとめ
 列名は、オブジェクト指向プログラミングのようにオブジェクト(=テーブル)単位で
ユニークにするのではなく、スキーマ単位,あるいはもっと上位のレベルでユニークに
するようにします。
 列名は「変数名(プロパティ名)」ではなく、「型名」だと思うようにします。
つまり、同じ列名を持っているものは、みな同じ性質を持っていて、かつ、他のテーブルで
同名の列名がある場合には、その列との結合が可能であるように設計します。
 しかし例えば同じ型(?)の列が必要な場合もあるので、そのあたりは臨機応変に。
例)自分の性別と恋愛対象の性別を、同一のテーブルに定義する場合とか。
ご清聴ありがとうございました。

Mais conteúdo relacionado

Mais procurados

SQLチューニング勉強会資料
SQLチューニング勉強会資料SQLチューニング勉強会資料
SQLチューニング勉強会資料Shinnosuke Akita
 
DB設計でこだわりたい三つの要素
DB設計でこだわりたい三つの要素DB設計でこだわりたい三つの要素
DB設計でこだわりたい三つの要素Takahiro YAMADA
 
機械学習で嘘をつく話
機械学習で嘘をつく話機械学習で嘘をつく話
機械学習で嘘をつく話Satoshi Hara
 
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門泰 増田
 
V$SQLとその周辺でER図を描いてみよう!
V$SQLとその周辺でER図を描いてみよう!V$SQLとその周辺でER図を描いてみよう!
V$SQLとその周辺でER図を描いてみよう!歩 柴田
 
MySQLで論理削除と正しく付き合う方法
MySQLで論理削除と正しく付き合う方法MySQLで論理削除と正しく付き合う方法
MySQLで論理削除と正しく付き合う方法yoku0825
 
データベース09 - データベース設計
データベース09 - データベース設計データベース09 - データベース設計
データベース09 - データベース設計Kenta Oku
 
OSを手作りするという趣味と仕事
OSを手作りするという趣味と仕事OSを手作りするという趣味と仕事
OSを手作りするという趣味と仕事uchan_nos
 
超簡単!!なTestLinkの使い方
超簡単!!なTestLinkの使い方超簡単!!なTestLinkの使い方
超簡単!!なTestLinkの使い方Cake YOSHIDA
 
ChatGPTの仕組みの解説と実務でのLLMの適用の紹介_latest.pdf
ChatGPTの仕組みの解説と実務でのLLMの適用の紹介_latest.pdfChatGPTの仕組みの解説と実務でのLLMの適用の紹介_latest.pdf
ChatGPTの仕組みの解説と実務でのLLMの適用の紹介_latest.pdfGinpei Kobayashi
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学MITSUNARI Shigeo
 
失敗事例で学ぶ負荷試験
失敗事例で学ぶ負荷試験失敗事例で学ぶ負荷試験
失敗事例で学ぶ負荷試験樽八 仲川
 
ドメイン駆動設計(DDD)の実践Part2
ドメイン駆動設計(DDD)の実践Part2ドメイン駆動設計(DDD)の実践Part2
ドメイン駆動設計(DDD)の実践Part2増田 亨
 
インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方Shohei Koyama
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意Yoshitaka Kawashima
 
バッチ処理にバインド変数はもうやめません? ~|バッチ処理の突発遅延を題材にして考えてみる~
バッチ処理にバインド変数はもうやめません? ~|バッチ処理の突発遅延を題材にして考えてみる~バッチ処理にバインド変数はもうやめません? ~|バッチ処理の突発遅延を題材にして考えてみる~
バッチ処理にバインド変数はもうやめません? ~|バッチ処理の突発遅延を題材にして考えてみる~Ryota Watabe
 
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるpospome
 
ブルックスのいう銀の弾丸とは何か?
ブルックスのいう銀の弾丸とは何か?ブルックスのいう銀の弾丸とは何か?
ブルックスのいう銀の弾丸とは何か?Yoshitaka Kawashima
 
データベース13 - トランザクションと障害回復
データベース13 - トランザクションと障害回復データベース13 - トランザクションと障害回復
データベース13 - トランザクションと障害回復Kenta Oku
 

Mais procurados (20)

SQLチューニング勉強会資料
SQLチューニング勉強会資料SQLチューニング勉強会資料
SQLチューニング勉強会資料
 
DB設計でこだわりたい三つの要素
DB設計でこだわりたい三つの要素DB設計でこだわりたい三つの要素
DB設計でこだわりたい三つの要素
 
Sql基礎の基礎
Sql基礎の基礎Sql基礎の基礎
Sql基礎の基礎
 
機械学習で嘘をつく話
機械学習で嘘をつく話機械学習で嘘をつく話
機械学習で嘘をつく話
 
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
 
V$SQLとその周辺でER図を描いてみよう!
V$SQLとその周辺でER図を描いてみよう!V$SQLとその周辺でER図を描いてみよう!
V$SQLとその周辺でER図を描いてみよう!
 
MySQLで論理削除と正しく付き合う方法
MySQLで論理削除と正しく付き合う方法MySQLで論理削除と正しく付き合う方法
MySQLで論理削除と正しく付き合う方法
 
データベース09 - データベース設計
データベース09 - データベース設計データベース09 - データベース設計
データベース09 - データベース設計
 
OSを手作りするという趣味と仕事
OSを手作りするという趣味と仕事OSを手作りするという趣味と仕事
OSを手作りするという趣味と仕事
 
超簡単!!なTestLinkの使い方
超簡単!!なTestLinkの使い方超簡単!!なTestLinkの使い方
超簡単!!なTestLinkの使い方
 
ChatGPTの仕組みの解説と実務でのLLMの適用の紹介_latest.pdf
ChatGPTの仕組みの解説と実務でのLLMの適用の紹介_latest.pdfChatGPTの仕組みの解説と実務でのLLMの適用の紹介_latest.pdf
ChatGPTの仕組みの解説と実務でのLLMの適用の紹介_latest.pdf
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学
 
失敗事例で学ぶ負荷試験
失敗事例で学ぶ負荷試験失敗事例で学ぶ負荷試験
失敗事例で学ぶ負荷試験
 
ドメイン駆動設計(DDD)の実践Part2
ドメイン駆動設計(DDD)の実践Part2ドメイン駆動設計(DDD)の実践Part2
ドメイン駆動設計(DDD)の実践Part2
 
インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
 
バッチ処理にバインド変数はもうやめません? ~|バッチ処理の突発遅延を題材にして考えてみる~
バッチ処理にバインド変数はもうやめません? ~|バッチ処理の突発遅延を題材にして考えてみる~バッチ処理にバインド変数はもうやめません? ~|バッチ処理の突発遅延を題材にして考えてみる~
バッチ処理にバインド変数はもうやめません? ~|バッチ処理の突発遅延を題材にして考えてみる~
 
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
 
ブルックスのいう銀の弾丸とは何か?
ブルックスのいう銀の弾丸とは何か?ブルックスのいう銀の弾丸とは何か?
ブルックスのいう銀の弾丸とは何か?
 
データベース13 - トランザクションと障害回復
データベース13 - トランザクションと障害回復データベース13 - トランザクションと障害回復
データベース13 - トランザクションと障害回復
 

Mais de tsudaa

Json型の使い方
Json型の使い方Json型の使い方
Json型の使い方tsudaa
 
ぬぎんくす問題
ぬぎんくす問題ぬぎんくす問題
ぬぎんくす問題tsudaa
 
Windows でも時刻合わせがしたい!
Windows でも時刻合わせがしたい!Windows でも時刻合わせがしたい!
Windows でも時刻合わせがしたい!tsudaa
 
Python と私の事情
Python と私の事情Python と私の事情
Python と私の事情tsudaa
 
真理とは何か
真理とは何か真理とは何か
真理とは何かtsudaa
 
Excelのどうでもよいtipsの紹介
Excelのどうでもよいtipsの紹介Excelのどうでもよいtipsの紹介
Excelのどうでもよいtipsの紹介tsudaa
 
MySQL のユーザー定義変数と RDB のココロ
MySQL のユーザー定義変数と RDB のココロMySQL のユーザー定義変数と RDB のココロ
MySQL のユーザー定義変数と RDB のココロtsudaa
 
HiroshimaJUG の 「Java8 Lambda ハンズオン with すごい広島」 を5分で振り返る
HiroshimaJUG の「Java8 Lambda ハンズオン with すごい広島」を5分で振り返るHiroshimaJUG の「Java8 Lambda ハンズオン with すごい広島」を5分で振り返る
HiroshimaJUG の 「Java8 Lambda ハンズオン with すごい広島」 を5分で振り返るtsudaa
 
スターマークの話
スターマークの話スターマークの話
スターマークの話tsudaa
 
Powershell のセキュリティ (大都会ver)
Powershell のセキュリティ (大都会ver)Powershell のセキュリティ (大都会ver)
Powershell のセキュリティ (大都会ver)tsudaa
 
昼の12時は午○何時?
昼の12時は午○何時?昼の12時は午○何時?
昼の12時は午○何時?tsudaa
 
PowerShell 紹介
PowerShell 紹介PowerShell 紹介
PowerShell 紹介tsudaa
 
全角チルダ問題
全角チルダ問題全角チルダ問題
全角チルダ問題tsudaa
 
資格は役に立つか
資格は役に立つか 資格は役に立つか
資格は役に立つか tsudaa
 
○○型言語と呼ばれるために備えるべき最低限の条件についての検討
○○型言語と呼ばれるために備えるべき最低限の条件についての検討○○型言語と呼ばれるために備えるべき最低限の条件についての検討
○○型言語と呼ばれるために備えるべき最低限の条件についての検討tsudaa
 
文字数はおいくら?(Ruby版)
文字数はおいくら?(Ruby版)文字数はおいくら?(Ruby版)
文字数はおいくら?(Ruby版)tsudaa
 
法律の読み方とか
法律の読み方とか法律の読み方とか
法律の読み方とかtsudaa
 
C++入門?
C++入門?C++入門?
C++入門?tsudaa
 

Mais de tsudaa (18)

Json型の使い方
Json型の使い方Json型の使い方
Json型の使い方
 
ぬぎんくす問題
ぬぎんくす問題ぬぎんくす問題
ぬぎんくす問題
 
Windows でも時刻合わせがしたい!
Windows でも時刻合わせがしたい!Windows でも時刻合わせがしたい!
Windows でも時刻合わせがしたい!
 
Python と私の事情
Python と私の事情Python と私の事情
Python と私の事情
 
真理とは何か
真理とは何か真理とは何か
真理とは何か
 
Excelのどうでもよいtipsの紹介
Excelのどうでもよいtipsの紹介Excelのどうでもよいtipsの紹介
Excelのどうでもよいtipsの紹介
 
MySQL のユーザー定義変数と RDB のココロ
MySQL のユーザー定義変数と RDB のココロMySQL のユーザー定義変数と RDB のココロ
MySQL のユーザー定義変数と RDB のココロ
 
HiroshimaJUG の 「Java8 Lambda ハンズオン with すごい広島」 を5分で振り返る
HiroshimaJUG の「Java8 Lambda ハンズオン with すごい広島」を5分で振り返るHiroshimaJUG の「Java8 Lambda ハンズオン with すごい広島」を5分で振り返る
HiroshimaJUG の 「Java8 Lambda ハンズオン with すごい広島」 を5分で振り返る
 
スターマークの話
スターマークの話スターマークの話
スターマークの話
 
Powershell のセキュリティ (大都会ver)
Powershell のセキュリティ (大都会ver)Powershell のセキュリティ (大都会ver)
Powershell のセキュリティ (大都会ver)
 
昼の12時は午○何時?
昼の12時は午○何時?昼の12時は午○何時?
昼の12時は午○何時?
 
PowerShell 紹介
PowerShell 紹介PowerShell 紹介
PowerShell 紹介
 
全角チルダ問題
全角チルダ問題全角チルダ問題
全角チルダ問題
 
資格は役に立つか
資格は役に立つか 資格は役に立つか
資格は役に立つか
 
○○型言語と呼ばれるために備えるべき最低限の条件についての検討
○○型言語と呼ばれるために備えるべき最低限の条件についての検討○○型言語と呼ばれるために備えるべき最低限の条件についての検討
○○型言語と呼ばれるために備えるべき最低限の条件についての検討
 
文字数はおいくら?(Ruby版)
文字数はおいくら?(Ruby版)文字数はおいくら?(Ruby版)
文字数はおいくら?(Ruby版)
 
法律の読み方とか
法律の読み方とか法律の読み方とか
法律の読み方とか
 
C++入門?
C++入門?C++入門?
C++入門?
 

ドメイン名の話 (データベース/SQL)