step05 課題レポート:発想法チャートDB
課題1:基本チャートのデータベース化
知的生産を支援する発想法(KJ法、NM法など)では、図5-1のようなチャートがよく使われる。短いテキストを書いたカード同士を矢印(有向枝)で関連づけた図である。このチャートを格納するためのデータベースをデザインしてみよ(2テーブル)。チャートを格納するとは、そのデータベースがあれば、そのチャートを再現するのに十分であるという意味だ。
注意
- データを入力する手段や、チャートを表示するUIについては、考えなくてよい。テーブルとリレーションシップでこのチャートを表現できればよいのである。
- データ(個々のカード)間の関連を、テーブルのフィールド間の関連と混同してはならない。両者はまったく別物である。
- テーブル設計ができたら、図5-1のチャート自体を表現するレコードを格納すること。図と異なるチャートではいけない。チャートの制約が適切に実装されているかどうか、採点が困難だからである。

課題2:グループ分け機能の拡張
課題1のデータベースについて、図5-2のように拡張せよ。
- 複数のカードをグループ化できる。
- カードと同様、グループへ、またはグループからも、矢印が張れる。
- グループは、グループまたはカードを含むことができる。ただし、1つのカードまたはグループが、複数のグループに含まれることはない。
- テーブル設計ができたら、図5-1のチャートを表現するレコードを格納すること。

課題解決のヒント
テーブル設計に唯一の正解はない。いろいろなテーマで経験を積めば、よいテーブル設計のセンスは自然に身につく。どんなテーブルがいくつ必要なのかを判断するには、まず、しげしげと図を眺め、そこにどんなモノがあるか、ソレにはどんな属性があるかを素朴に観察することだ。モノ別にテーブルを、属性別にフィールドを作ればおおむねうまくいく。
こうした、現実世界のモノと属性に着目したソフトウェアの設計手法を、オブジェクト指向設計(OOD)という。
たとえば課題1は、以下の2テーブルで表現するのが自然だろう。
- カードテーブル
- 矢印テーブル