✨
DBにおける事実と情報の違い
Daily Blogging52日目
DBには事実のみを格納せよ
事実とは
ある形式に揃えられたデータのこと
形式というのはいわゆるカラムのことであり、特定の事実を属性で切り出した状態を指す
名前 | 年齢 | 性別 |
---|---|---|
佐藤 | 18 | 男 |
鈴木 | 24 | 女 |
田中 | 38 | 男 |
この状態だと、佐藤さんという18歳の男性がいるなといったなんの文脈もない事実だけがDBに存在している。
事実から情報へ
情報とは、問いを立ててそれに対する回答を事実から導き出したもの
例えばこういう事実があったとして
transactions
id | user_id | amount | created_at |
---|---|---|---|
1 | 123 | 5000 | 2024-12-24 |
2 | 124 | 1000 | 2024-12-25 |
3 | 200 | 10000 | 2024-12-24 |
この事実に対して、こういう問いを立ててみる。
「2024-12-24の売り上げの合計はいくらか」
SELECT SUM(amount) FROM transactions WHERE created_at = '2024-12-24';
上記のクエリで、「2024-12-24の売り上げの合計は15,000」という情報を得ることができる。
SQLとDB
どっちもシステムにおけるデータを取り扱うものだけど、それぞれの関心ごとが違う
- DB
- 事実
- SQL
- 問い、情報
情報は格納しないでね
※パフォーマンスの観点など、時と場合によるよ
基本的にDBには事実のみを格納した方が良い
情報をDBに格納するような運用にした場合、データの整合性を取るのが難しくなったりデータから別の情報を抽出することが難しくなる。
悪い例
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
age INT NOT NULL -- これはNG
);
年齢は、その人がいつ産まれたのかという事実から算出した情報である。
年齢をDBに格納してしまうと、毎年の更新が必要になったり、この人はどのタイミングで何歳になるのか、何月生まれなのかなどの別の情報が取れなくなる。
まとめ
情報を格納すると、それ以外の使い道も無くなるのでちゃんと事実を格納するようにしよう
Discussion