12
ドメインの話 LTDD #15 @tsuda_ahr

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

  • Upload
    tsudaa

  • View
    189

  • Download
    2

Embed Size (px)

Citation preview

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

ドメインの話LTDD #15

@tsuda_ahr

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

ドメインというと色々ありますが…

今回のドメインは、www.servername.com 、的なやつじゃないです。

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

昨年、某DB勉強会のハンズオンで、こんな ER 図を書きましたが

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

列名の命名方法で質問があったんですね。

なぜ「file_size」なのか。「Size」じゃないのか?

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

ドメイン(定義域)という考え方がありまして。

列名はオブジェクト指向のプロパティやフィールドとはちょっと違う感じ。

列名 = 型、に近い。

この「型」のようなものを「ドメイン名」と呼ぶ。

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

ドメイン名の利点1: 自然結合

普通に結合select * from TABLE_A inner join TABLE_B

on TABLE_A.key1 = TABLE_B.key1;

こう書けるselect * from TABLE_A natural join TABLE_B;

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

つまり

普通の結合の場合は、結合する列の対応を記述しないといけない。

自然結合の場合は、同名の列名は結合の対象と自動で判断する。

記述量が減るので、ちょっと便利。

ただ、自然結合は、同名の列名すべてと JOIN するので使いづらい場合が多い。

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

ドメイン名の利点2: 自然結合を使わない場合でも!

同名の列は「結合の条件となり得る」と判断できる。

逆に、列名が違うもの同士の結合は結合してはならない、という暗黙の了解(=規約)を得ることができる。(オブジェクト指向でいう「型の違う代入」と同等)

こちらの利点が主力。

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

利点2の場合は、実は別の方法もある

create domain 文

本当にデータ型を作る

-- PostgreSQL の例

create domain file_size as numeric(12);

create table TABLE_A(

key1 as varchar(10),

size as file_size

);

-- Oracle にはない模様

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

create domain の利点と欠点

型名(ドメイン名)による、列の生成が可能となる。→命名規約というあやふやなものに依存しなくて済む。

他方、ドメイン名に頼って列名を自在に命名すると、自然結合が効かなくなる。

結合列の是非も列名からだけでは判定できないので、SQLの組立てが難しくなる場合が多い。(ハンガリアン記法みたいですね)

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

まとめ

列名は、オブジェクト指向プログラミングのようにオブジェクト(=テーブル)単位でユニークにするのではなく、スキーマ単位,あるいはもっと上位のレベルでユニークにするようにします。

列名は「変数名(プロパティ名)」ではなく、「型名」だと思うようにします。つまり、同じ列名を持っているものは、みな同じ性質を持っていて、かつ、他のテーブルで同名の列名がある場合には、その列との結合が可能であるように設計します。

しかし例えば同じ型(?)の列が必要な場合もあるので、そのあたりは臨機応変に。例)自分の性別と恋愛対象の性別を、同一のテーブルに定義する場合とか。

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

ご清聴ありがとうございました。