意見やディスカッションを求める質問に該当する場合は、クローズ票を入れていただければ、直ちにクローズ致します。

例えば、ユーザーの設定により通知のオン・オフを切り替えるシステムを考えます。

データベース設計として2通りを考えました。

  1. ステータス列を作成して、オン・オフ表現する
  2. レコードの有無で、オン・オフを表現する

具体例として、ユーザー1は通知が有効、ユーザー2は通知が無効、を考えます。

1の例

| user_id | enabled |
|:-------:|:-------:|
| 1       | true    |
| 2       | false   |

2の例

| user_id |
|:-------:|
| 1       |

1の場合、メリットとして、下記が考えられます。

  • オフであるということが明確にわかります。
  • 通知をオフにした人は何人?などの集計も簡単です。

一方で、デメリットは、量が多いことです。

  • データ量が多い (ユーザー数 x 通知の種類)

2の場合、メリットとして、

  • データ量は少ないです。

デメリットは、下記を考えました。

  • INSERT / DELETE で更新する(DELETEは遅い)
  • オフに対する集計ができない (全てからオンを引く、という状態)
  • オフに対する状態が保持できない (x日にオフになった等)

とはいえ決定打となる要素がなく、現状は、ケースバイケースで対応してしまいます。

データベース設計に関するデファクトスタンダード、
または、書籍、積極的に発信をしいるウォッチ推奨のエンジニア、など
ご教授願えれば幸いです。

参考にしたもの

データベース設計徹底指南

ある物事に対する事実の集合

「通知を受け取るユーザーの集合」だと考えれば、1?
「ユーザーの通知設定」というデータの集合だと考えれば、2?

第1回 データベース設計とは:初めてのデータベース設計|gihyo.jp … 技術評論社

概念設計では,データベースによって管理の対象とするものを現実の世界から抽出して概念モデルを作成します。

管理の対象は、ユーザーごとの通知設定。
レコードで管理するのか、行で管理するのかは、概念モデルの時点では判明しない?