今日の知見

Toshが諸々で得た知見を雑に書きます。

2019年2日目: 概念データモデル

ご挨拶

お世話になっております。Toshでございます。
情報処理技術者試験が近いのにMHWが楽しすぎて過去問すらマトモに見れていない今日この頃ですorz

少しでも勉強してる感を出すため、本日はデータベーススペシャリストに絡んだ内容をば。

概念データモデル #とは

現実にある情報をまとめらたり分けたりして「これは○○だ」と一言で表せるものにした後、それらの関係を線で結んだもの・・・かな?
オブジェクト指向言語を扱ったことがある方には「クラス図みたいなもの」と伝えればわかりやすい・・・かな?
これを項目とかキーとか詳しく書いたものがER図になる認識です。

自己参照とかもろもろ省いてますが、とりあえず以下を見ていただいた方が早い気がします。

多重度

通販でよくある注文情報とかが分かりやすいと思います。

  • 注文情報・・・注文番号、送付先や伝票番号など
    • 1回の註文につき1つだけ
  • 注文詳細・・・注文した商品や金額、点数など
    • 1回の註文につき1つ以上

f:id:tosh_note:20190331154308p:plain
リレーション

このような場合、矢印の方向が「注文情報」→「注文詳細」と、矢印の向き先が1つ以上(多)のモデルに向きます。
更に「関連するデータがないかもしれない」状態を許可する場合は「〇」、必ずデータがある状態を表す場合は「●」を追加します。

※多対多だと矢印の向きが双方向⇔になっちゃいますが、正規化するにあたりこれは排除されます。
正規化についてはまたの機会にでも・・・

継承関係(スーパータイプとサブタイプ)

オブジェクトの継承みたいなものです。 上に大本となる抽象的なモデル(親)、下により具体的なモデル(子)を置いて「▲」の付いた線で表します。

f:id:tosh_note:20190331154423p:plain
排他的サブタイプ

上記の例は『「商品」には「単品」と「セット」のどちらかである』という状態を表したものです。 これを「排他的サブタイプ」というらしいです。

また『「商品」は「セール品」と「予約商品」があり、どちらも両立する』といった共存するサブタイプを表す場合は「共存的サブタイプ」として下記のように表します。

f:id:tosh_note:20190331154501p:plain
共存的サブタイプ

※「共存的サブタイプ」の親と子を1対1とすることで包含も表現できますが、「共存的サブタイプ」と絵面がほとんど変わらないので割愛させて頂きます。

最後に

こうやって文字に起こすと概念として頭に入っていても自分の理解が浅いことが浮き彫りになりますね・・・
しばらくデータベーススペシャリストのネタを続けようかしら←

以上です。
来年度もドタバタしそうですがご安全に。