オブジェクト図を使ってデータ構成を表現する
新しいシステムを保守するにしても、開発するにしても、そのシステムにおけるデータの動きを理解するのは重要なことです。
ただ、データの動きを理解するといっても、簡単ではありません。
- それぞれのデータが何を意味しているのか
- どの項目が重要で、どの項目が瑣末なのか
- それぞれのデータがどのように関連しているのか。
これらのことがきちんと理解できなければ、データの動きを理解しているとは言えません。そして、理解した内容をきちんと資料に残せなければ、自分自身が忘れてしまうかもしれないですし、他の人に理解した内容を伝えることもできません。
きちんとデータの動きを理解するためには、各データや項目の定義だけではなく、具体的なデータの例を把握することが欠かせません。
そして、その内容を記録しておき、また必要に応じて他人に伝えるためには、わかりやすく表記するための手段が欠かせません。そこで使えるのが、UMLのオブジェクト図です。
UMLというのは、「Unified Modeling Language」の略で、日本語では「統一モデリング言語」と言います。システムに関するいろいろな側面を表現するための手法を集めたものですが、この記事では、そのうちのひとつである「オブジェクト図」をご紹介します。
オブジェクト図のイメージ
百聞は一見に如かず、ということで、オブジェクト図のサンプルをひとつ見てみましょう。
これは、顧客向けの請求書に関するデータをオブジェクト図で表現したものです。
「顧客」「請求書」「請求書明細」というタイトルが付いた箱(四角)が並べられ、関連する箱同士が線で結ばれています。
ひとつひとつの箱がひとつの情報を表しています。システムのデータベースでいうと、箱ひとつが1レコードを表しているようなイメージです。
それぞれの箱には属性値(データベースでいうカラム)の内容が記載されています。オブジェクト図は、テーブルの定義というよりも、具体的なデータの例を表現するための方法なので、このように具体的な値を書きます。
また、オブジェクト図を使用することで、システムに対して入力が発生した場合のデータの動きを表現することもできます。
先ほどの例に、「請求書明細」をひとつ追加した例を考えてみましょう。
わかりやすくするため、元の状態から変化したところを赤くしてあります。
まず、「請求書明細」を追加したため、「請求書明細」の箱が3つから4つに増えています。そして、「請求書」の項目にある「請求金額」が、新しく追加された明細の金額分だけ増えています。
このように、システム上での操作に伴ってデータがどのように動くのか、ということも視覚的に表現できるということです。
オブジェクト図の書き方
ここから、オブジェクト図のそれぞれの記載の意味について、見ていきましょう。
※本記事で解説する内容は、オブジェクト図を利用してデータ構成を表現するにあたり、必要最低限に絞ってあります。また、わかりやすさを重視するため説明を簡略している箇所があります。UMLの正確な定義を知りたい方は、公式サイトや専門の書籍などを参照してください。
オブジェクト
オブジェクトはひとつの情報を表す要素で、上下に分割されたひとつの四角形で表現されます。
この場合のひとつの情報というのは、データベース上での1レコードを意味します。
四角形の上部には、そのオブジェクトの名称を記載します。これは、データベース上のテーブル名に当たるもので、該当のオブジェクト(レコード)がどのテーブルのものなのかを表しています。
また、四角形の下部には、主要な項目とその値を記載します。項目の名称を左側に、項目の値を右側に記載し、それらを「:」(コロン)で区切ります。
項目名の先頭に「(K)」と記載してあるのは、キー項目、つまり、そのレコードを一意に特定できる項目を表しています。この記法はUMLのルールに基づいたものではなく、記載をわかりやすくするために、筆者が独自に追加したものです。
リンク
関連性があるオブジェクト同士は線で結びます。この線のことを「リンク」といいます。
「関連性がある」とは
ここでいう”関連性がある”とは、一方の項目値からもう一方のレコードを特定できるような関係性にある、ということです。
上記のイメージでいうと、「請求書明細」には、「請求書」のキーである「請求書番号」という項目を持っているので、「請求書」のレコードをひとつに特定することができます。
そのため、「請求書」と「請求書明細」は線(リンク)で結ばれています。
「請求書」と「請求書明細」というような親子関係になっているデータは、システムにおいてはよく見られます。
リンクを結ぶべきでないとき
リンクを結ぶかどうかの基準は基本的に上記の通りなのですが、これには例外があります。
それは、他のリンクによって間接的に関連性があることが示されている場合です。
以下の例を見てください。
「請求書」「請求書明細」「請求書備考」の3種類のオブジェクトがあり、関連性を示すリンクが結ばれています。ここで注目していただきたいのは、「請求書」と「請求書備考」がリンクで結ばれていないことです。
「請求書備考」には、「請求書番号」を持っているので、「請求書備考」から見ると「請求書」をひとつに特定できることになります。
しかし、「請求書」と「請求書明細」がリンクで結ばれていて、「請求書明細」と「請求書備考」もリンクで結ばれているので、「請求書明細」を経由して間接的に関連性が明示されていると言えます。
このような場合、「請求書」と「請求書備考」とはリンクを結びません。
オブジェクト図を作るときの注意点
ここから、オブジェクト図を使ってデータの構造を表すときに注意すべき点を2つお伝えします。
- 同じ種類のオブジェクトは位置を揃える
- リレーションのルールは厳格に守る
それぞれ詳しく見ていきましょう。
①同じ種類のオブジェクトは位置を揃える
オブジェクト図では、パッと見では同じような見た目の四角形がたくさん並んでいるような印象を受けると思います。
もちろん、書いてある文字を読めば、それぞれの内容はわかります。しかし、このような図で重要なのは、パッと見である程度は全体の構成が見えることです。
そこで重要になるのが、同じ種類のオブジェクトを揃えることです。
ここで、上で取り上げたサンプルを改めて見てみましょう。
この図は大きく、左側・真ん中・右側の3つに分けることができます。左側には「顧客」、真ん中には「請求書」、右側には「請求書明細」といったように位置で見分けがつくようになっています。
このように、オブジェクトの配置にも意味を持たせることで、見る人にとって理解しやすいオブジェクト図にすることができます。
②リレーションのルールは厳格に守る
リレーションを記載するのは、一方のオブジェクトの属性値から他方のオブジェクトを特定できるときです。既述の通り、例外はあるのですが、基本的にはこのルールだけを意識すべきです。
しかし、オブジェクト図を作成していると、ついつい他の理由でオブジェクト同士を線で繋ぎたくなってしまうことがあります。
典型的なのは、システム上の操作でインプットとアウトプットの関係にあるデータです。
以下の例を見てみてください。
仮に、請求書明細の入力をする際に、既存の明細をコピーして新たな明細を入力することができるとしましょう。3つ目の「請求書明細」を作成する際、2つ目の「請求書明細」をコピーして作成していると、ついついこの2つに関連性があるため、線で結びたくなってしまいます。
しかし、3つ目の「請求書明細」と2つ目の「請求書明細」は線で結ぶべきではありません。「請求書明細」を特定するには、「請求書番号」と「請求書明細番号」が一意に定まる必要がありますが、2つ目の「請求書明細」から3つ目の「請求書明細」は特定できていません(逆も然り)。
よって、この2つはリンクを結ぶべきではありません。このような場合に、リンクを結んでしまうと、別の人がオブジェクト図を見たときに、リンクから何を読み取れば良いのかがわからなくなってしまいます。
リンクは、あくまで一方から他方を特定できる関係性を表すことだけに使いましょう。
おわりに
この記事では、データベースの動きを表現するオブジェクト図を紹介しました。
新規システムを構築したり、新しくシステムを保守したりする場合、データの動きを理解するというのは、とても重要なステップになります。
そのような状況で、オブジェクト図を使用してデータの動きを適切に表現できれば、自分自身の理解にも、周りのメンバーの理解にも大きく寄与できます。
ぜひ、オブジェクト図を使いこなし、データの理解を効率よく進めていきましょう。