ドメインの話
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の組立てが難しくなる場合が多い。
(ハンガリアン記法みたいですね)
まとめ
 列名は、オブジェクト指向プログラミングのようにオブジェクト(=テーブル)単位で
ユニークにするのではなく、スキーマ単位,あるいはもっと上位のレベルでユニークに
するようにします。
 列名は「変数名(プロパティ名)」ではなく、「型名」だと思うようにします。
つまり、同じ列名を持っているものは、みな同じ性質を持っていて、かつ、他のテーブルで
同名の列名がある場合には、その列との結合が可能であるように設計します。
 しかし例えば同じ型(?)の列が必要な場合もあるので、そのあたりは臨機応変に。
例)自分の性別と恋愛対象の性別を、同一のテーブルに定義する場合とか。
ご清聴ありがとうございました。

More Related Content

PDF
O/Rマッパーによるトラブルを未然に防ぐ
PDF
BigQueryを始めてみよう - Google Analytics データを活用する
PDF
Vacuum徹底解説
PDF
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
PDF
Scala警察のすすめ
PDF
イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方
PDF
トランザクションスクリプトのすすめ
PDF
【旧版】Oracle Database Cloud Service:サービス概要のご紹介 [2021年7月版]
O/Rマッパーによるトラブルを未然に防ぐ
BigQueryを始めてみよう - Google Analytics データを活用する
Vacuum徹底解説
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Scala警察のすすめ
イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方
トランザクションスクリプトのすすめ
【旧版】Oracle Database Cloud Service:サービス概要のご紹介 [2021年7月版]

What's hot (20)

PDF
例外設計における大罪
PDF
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
PPTX
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
PPTX
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
PDF
2019年度 若手技術者向け講座 実行計画
PDF
20180508 AWS Black Belt Online Seminar AWS Greengrassで実現するエッジコンピューティング
PDF
本当にできるの?ミッションクリティカルシステムのクラウド移行ダイジェスト (Oracle Cloudウェビナーシリーズ: 2021年7月7日)
PDF
AWS の IoT 向けサービス
PPTX
backlogsでもCI/CDする夢を見る
PDF
Spring Boot × Vue.jsでSPAを作る
PDF
Snowflake Architecture and Performance(db tech showcase Tokyo 2018)
PPTX
SageMakerを使った異常検知
PDF
データ分析グループの組織編制とその課題 マーケティングにおけるKPI設計の失敗例 ABテストの活用と、機械学習の導入 #CWT2016
PDF
ドメインオブジェクトの見つけ方・作り方・育て方
PDF
SQL Server チューニング基礎
PDF
社内Java8勉強会 ラムダ式とストリームAPI
PPTX
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PDF
SQLアンチパターン - ジェイウォーク
PPTX
NuxtでAPIサーバー立ててみた
例外設計における大罪
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
2019年度 若手技術者向け講座 実行計画
20180508 AWS Black Belt Online Seminar AWS Greengrassで実現するエッジコンピューティング
本当にできるの?ミッションクリティカルシステムのクラウド移行ダイジェスト (Oracle Cloudウェビナーシリーズ: 2021年7月7日)
AWS の IoT 向けサービス
backlogsでもCI/CDする夢を見る
Spring Boot × Vue.jsでSPAを作る
Snowflake Architecture and Performance(db tech showcase Tokyo 2018)
SageMakerを使った異常検知
データ分析グループの組織編制とその課題 マーケティングにおけるKPI設計の失敗例 ABテストの活用と、機械学習の導入 #CWT2016
ドメインオブジェクトの見つけ方・作り方・育て方
SQL Server チューニング基礎
社内Java8勉強会 ラムダ式とストリームAPI
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
SQLアンチパターン - ジェイウォーク
NuxtでAPIサーバー立ててみた
Ad

More from tsudaa (18)

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

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