DBの初学者です。Twitterのようなサービスではユーザ名とペアになるサロゲートキーは不要と考えてもよいでしょうか?
(訂正:本文でTwitterのユーザ名は「変更不可」と誤解しておりましたが、実際はユーザ名も変更可能でした。)
詳細
Twitterのユーザ名は**「変更不可、長さ15文字まで。英数字(文字A~Z、数字0~9)とアンダースコアのみ利用可」**です。この条件ならユーザ名をナチュラルキーとして利用できるので、サロゲートキーは不要だと考えましたが、実際はどうなのでしょうか?
(こちらの資料で、つぶやきテーブルにユーザ名の代わりにサロゲートキーを利用しているようでした)
論点1
Twitterのアカウント数上限をスパムアカウントなども考慮して100億程度とする。例えばmysqlではBIGINTを使う必要があり8バイト必要。一方user名はアスキー文字で最大15文字なので、VARCHAR(15)で最大16バイト?となるが、1文字のユーザ名は2バイト?である。8バイト vs 2〜16バイトなら両者のサイズ差は無視できるのではないか?
(他テーブルのインデックスにも利用されるのでユーザ数が莫大なことを考えると実は無視できない?実際どうなのでしょうか?)
論点2
https://twitter.com/a のように、個人ページのurlに本人のidが含まれるが、このページで表示されるつぶやき一覧を取得するために、わざわざユーザ名からサロゲートキーを取得し、サロゲートキーでつぶやき一覧を取得するコードが必要なため複雑になる。
補足
Twitterがサロゲートキーを採用した理由はrailsを利用していたことや、将来のユーザ名変更にも対応できる柔軟性のためかもしれません。
本投稿では単純化のため、フレームワークの都合や将来のユーザ名の変更は無視できるものとして、これからTwitterのようなサービスを作る場合、ユニークなユーザ名とペアになるサロゲートキーをつけた方が良いかどうか?という疑問です。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/05/05 08:57
退会済みユーザー
2019/05/05 08:58
2019/05/05 08:59
2019/05/05 09:00
2019/05/05 09:00
退会済みユーザー
2019/05/05 09:15