質問編集履歴
3
訂正文を追加
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
論点の説明を改善しました
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
疑問を明確にしました
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のようなサービスにおいて、ユニークなユーザ名とペアになるサロゲートキーをつけた方が良いかどうか、ご意見をお聞かせ下さい!
|