コトを記録するテーブルについて
結論
僕は、基本的にコトを記録するテーブルを作るようにするテーブル設計を凄く良いと思っています。
なぜなら関心事が分離されるようになり、分かりやすくなると思うからです。
一方、コトや状態や情報が一緒にテーブルを作ってしまう設計は良くないと思っています。
コト、状態、情報など様々な関心事が1つのテーブルに混ざってしまい分かりづらくなってしまうと思うからです。
そもそも
そもそもDBは現実の物事を人間の脳ではなくコンピュータに記録させる為にあると思っています。
そして記録させる動作は、人間がある目的の為にシステムを利用して行う動作、すなわちユースケースと呼ばれます。
例えば、人間が本を借りた事を自身ではなくコンピュータに記録させる事を目的としてシステム上の『本を借りた事を記録する機能』を利用するとします。
このユースケースからDBに記録させたい事は、本の状態や人間の状態ではなく、『本を借りた』コトです。
すなわち必要なテーブルは、下記のようになると思われます。
|本を借りたテーブル| |---| - 借りた人間のアイデンティティ - 本のアイデンティティ - 借りた日付