質問するログイン新規登録

質問編集履歴

3

訂正文を追加

2019/05/05 09:04

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,4 +1,5 @@
1
1
  DBの初学者です。Twitterのようなサービスではユーザ名とペアになるサロゲートキーは不要と考えてもよいでしょうか?
2
+ (訂正:本文でTwitterのユーザ名は「変更不可」と誤解しておりましたが、実際はユーザ名も変更可能でした。)
2
3
 
3
4
  ### 詳細
4
5
  Twitterのユーザ名は**「変更不可、長さ15文字まで。英数字(文字A~Z、数字0~9)とアンダースコアのみ利用可」**です。この条件ならユーザ名をナチュラルキーとして利用できるので、サロゲートキーは不要だと考えましたが、実際はどうなのでしょうか?

2

論点の説明を改善しました

2019/05/05 09:04

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,23 +1,17 @@
1
- DBの初学者です。Twitterサロゲートキーを使う理由でしょうか?
1
+ DBの初学者です。Twitterのようなービスではユーザ名とペアになるサロゲートキーは不要と考えてもよいでしょうか?
2
2
 
3
- ### 主題
3
+ ### 詳細
4
- Twitterのユーザ名は**「変更不可、長さ15文字まで。英数字(文字A~Z、数字0~9)とアンダースコアのみ利用可」**です。
4
+ Twitterのユーザ名は**「変更不可、長さ15文字まで。英数字(文字A~Z、数字0~9)とアンダースコアのみ利用可」**です。この条件ならユーザ名をナチュラルキーとして利用できるので、サロゲートキーは不要だと考えましたが、実際はどうなのでしょうか?
5
- この条件ならユーザ名をナチュラルキーとして利用できるので、サロゲートキーは不要だと思いますが、実際はどうなのでしょうか?
6
5
  (こちらの[資料](https://www.atmarkit.co.jp/news/201004/19/twitter.html)で、[つぶやきテーブルにユーザ名の代わりにサロゲートキーを利用](https://www.atmarkit.co.jp/news/201004/19/twitter02.png)しているようでした)
7
6
 
8
- ### 詳細
9
- **私がサロゲートキーは不要だと思った理由と、論点となると思われるポイント**
10
- Twitterのアカウント数上限をスパムアカウントなども考慮して100億程度とする。例えばmysqlではBIGINTを使う必要があり8バイト必要。一方user名はアスキー文字で最大15文字なので、VARCHAR(15)で最大16バイト?となるが、1文字のユーザ名は2バイト?である。
11
7
 
12
8
  **論点1**
13
- **8バイト** vs **2〜16バイト**なら両者のサイズ差は無視できるのではないか?
9
+ Twitterのアカウント数上限をスパムアカウントなども考慮して100億程度とする。例えばmysqlではBIGINTを使う必要があり8バイト必要。一方user名はアスキー文字で最大15文字なので、VARCHAR(15)で最大16バイト?となるが、1文字のユーザ名は2バイト?である。**8バイト** vs **2〜16バイト**なら両者のサイズ差は無視できるのではないか?
14
10
  (他テーブルのインデックスにも利用されるのでユーザ数が莫大なことを考えると実は無視できない?実際どうなのでしょうか?)
15
11
 
16
-
17
12
  **論点2**
18
13
  [https://twitter.com/a](https://twitter.com/a) のように、個人ページのurlに本人のidが含まれるが、このページで表示されるつぶやき一覧を取得するために、わざわざユーザ名からサロゲートキーを取得し、サロゲートキーでつぶやき一覧を取得するコードが必要なため複雑になる。
19
14
 
20
-
21
15
  **補足**
22
16
  Twitterがサロゲートキーを採用した理由はrailsを利用していたことや、将来のユーザ名変更にも対応できる柔軟性のためかもしれません。
23
- 本投稿では単純化のため、フレームワークの都合や将来のユーザ名の変更は無視できるものとして、Twitterのようなサービスにおいて、ユニークなユーザ名とペアになるサロゲートキーをつけた方が良いかどうか、ご意見をお聞かせ下さ
17
+ 本投稿では単純化のため、フレームワークの都合や将来のユーザ名の変更は無視できるものとして、これからTwitterのようなサービスを作る場合、ユニークなユーザ名とペアになるサロゲートキーをつけた方が良いかどうか?とう疑問です。

1

疑問を明確にしました

2019/05/05 08:50

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,8 +1,8 @@
1
- ##### 皆さんご意見せて下さい!
1
+ DB初学者です。Twitterがサロゲートキー使う理由は何でしょう
2
2
 
3
3
  ### 主題
4
4
  Twitterのユーザ名は**「変更不可、長さ15文字まで。英数字(文字A~Z、数字0~9)とアンダースコアのみ利用可」**です。
5
- この条件ならユーザ名をナチュラルキーとして利用できるので、サロゲートキーは不要だと思いますが、皆さんはどう思いますか?
5
+ この条件ならユーザ名をナチュラルキーとして利用できるので、サロゲートキーは不要だと思いますが、実際はどうなのでしょうか?
6
6
  (こちらの[資料](https://www.atmarkit.co.jp/news/201004/19/twitter.html)で、[つぶやきテーブルにユーザ名の代わりにサロゲートキーを利用](https://www.atmarkit.co.jp/news/201004/19/twitter02.png)しているようでした)
7
7
 
8
8
  ### 詳細
@@ -20,4 +20,4 @@
20
20
 
21
21
  **補足**
22
22
  Twitterがサロゲートキーを採用した理由はrailsを利用していたことや、将来のユーザ名変更にも対応できる柔軟性のためかもしれません。
23
- 本投稿では単純化のため、フレームワークの都合や将来のユーザ名の変更は無視できるものとして、Twitterのようなサービスにおいて、ユニークなユーザ名とペアになるサロゲートキーをつけた方が良いかどうか、皆さんのご意見をお聞かせ下さい!
23
+ 本投稿では単純化のため、フレームワークの都合や将来のユーザ名の変更は無視できるものとして、Twitterのようなサービスにおいて、ユニークなユーザ名とペアになるサロゲートキーをつけた方が良いかどうか、ご意見をお聞かせ下さい!