データベース 2024-03-30

DB設計のID設計:UUID vs 連番 vs ULID の選び方

DB 設計における ID の選び方を解説。UUID・連番(AUTO_INCREMENT)・ULID それぞれのトレードオフとユースケースを比較します。

Read in: en
DB設計のID設計:UUID vs 連番 vs ULID の選び方

IDとは

あるものを一意に特定するもの。

集合論において、あるものと属性が1:1で対応することを全単射と呼ぶ。

全単射になっているものはIDとして機能とする。

IDを考えるときは、単数に対するものか、複数(グループ)に対するものか、複数であればどのような粒度であるのか?などを考慮する必要がある。ex. カニという属性を考えるとして、どんな種類なのか?何科目なのか?色は?名称は?

一見一意性を持たないような属性であっても、文脈によってはIDとして機能することもある。ex. . 特定の集団におけるその集団が1つしか持ち合わせいない物品など

IDの一部に意味を持たせるような設計は避けたほうが良い。ex. 製品番号の値の一部に色などの識別子を含める

そのような設計をすると第一正規形を満たせなくなるため、クエリが不用意に複雑化したり、DB設計に悪影響を及ぼす。

ナチュラルキーか、サロゲートキーか

ナチュラルキーは実世界に存在する言葉やラベルをIDとするのに対して、サローゲートキーはDBまたはそれを利用するアプリケーション内部だけで通じるものをIDとする。

全単射が成り立つのであればナチュラルキーを使用して問題ないが、次の点に注意を払う。

サロゲートキーは次の点に注意を払う。

余談

サロゲートキーでID設計する際、物理設計を意識するケースがあると思う。自動採番の値とすべきか、乱択なユニークな値とすべきかによって性能影響があるケースなど。

参考

Tags: DB
Share: 𝕏 Post Facebook Hatena
✏️ View source / Discuss on GitHub
☕ サポート

このブログを応援していただける方は、以下からサポートをお願いします。いただいたサポートはブログ運営・技術研鑽に活用します。


関連記事