質問編集履歴
3
訂正文を追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
DBの初学者です。Twitterのようなサービスではユーザ名とペアになるサロゲートキーは不要と考えてもよいでしょうか?
|
2
|
+
|
3
|
+
(訂正:本文でTwitterのユーザ名は「変更不可」と誤解しておりましたが、実際はユーザ名も変更可能でした。)
|
2
4
|
|
3
5
|
|
4
6
|
|
2
論点の説明を改善しました
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,32 +1,22 @@
|
|
1
|
-
DBの初学者です。Twitter
|
1
|
+
DBの初学者です。Twitterのようなサービスではユーザ名とペアになるサロゲートキーは不要と考えてもよいでしょうか?
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
###
|
5
|
+
### 詳細
|
6
6
|
|
7
|
-
Twitterのユーザ名は**「変更不可、長さ15文字まで。英数字(文字A~Z、数字0~9)とアンダースコアのみ利用可」**です。
|
7
|
+
Twitterのユーザ名は**「変更不可、長さ15文字まで。英数字(文字A~Z、数字0~9)とアンダースコアのみ利用可」**です。この条件ならユーザ名をナチュラルキーとして利用できるので、サロゲートキーは不要だと考えましたが、実際はどうなのでしょうか?
|
8
|
-
|
9
|
-
この条件ならユーザ名をナチュラルキーとして利用できるので、サロゲートキーは不要だと思いますが、実際はどうなのでしょうか?
|
10
8
|
|
11
9
|
(こちらの[資料](https://www.atmarkit.co.jp/news/201004/19/twitter.html)で、[つぶやきテーブルにユーザ名の代わりにサロゲートキーを利用](https://www.atmarkit.co.jp/news/201004/19/twitter02.png)しているようでした)
|
12
10
|
|
13
11
|
|
14
12
|
|
15
|
-
### 詳細
|
16
|
-
|
17
|
-
**私がサロゲートキーは不要だと思った理由と、論点となると思われるポイント**
|
18
|
-
|
19
|
-
Twitterのアカウント数上限をスパムアカウントなども考慮して100億程度とする。例えばmysqlではBIGINTを使う必要があり8バイト必要。一方user名はアスキー文字で最大15文字なので、VARCHAR(15)で最大16バイト?となるが、1文字のユーザ名は2バイト?である。
|
20
|
-
|
21
13
|
|
22
14
|
|
23
15
|
**論点1**
|
24
16
|
|
25
|
-
**8バイト** vs **2〜16バイト**なら両者のサイズ差は無視できるのではないか?
|
17
|
+
Twitterのアカウント数上限をスパムアカウントなども考慮して100億程度とする。例えばmysqlではBIGINTを使う必要があり8バイト必要。一方user名はアスキー文字で最大15文字なので、VARCHAR(15)で最大16バイト?となるが、1文字のユーザ名は2バイト?である。**8バイト** vs **2〜16バイト**なら両者のサイズ差は無視できるのではないか?
|
26
18
|
|
27
19
|
(他テーブルのインデックスにも利用されるのでユーザ数が莫大なことを考えると実は無視できない?実際どうなのでしょうか?)
|
28
|
-
|
29
|
-
|
30
20
|
|
31
21
|
|
32
22
|
|
@@ -36,10 +26,8 @@
|
|
36
26
|
|
37
27
|
|
38
28
|
|
39
|
-
|
40
|
-
|
41
29
|
**補足**
|
42
30
|
|
43
31
|
Twitterがサロゲートキーを採用した理由はrailsを利用していたことや、将来のユーザ名変更にも対応できる柔軟性のためかもしれません。
|
44
32
|
|
45
|
-
本投稿では単純化のため、フレームワークの都合や将来のユーザ名の変更は無視できるものとして、Twitterのようなサービス
|
33
|
+
本投稿では単純化のため、フレームワークの都合や将来のユーザ名の変更は無視できるものとして、これからTwitterのようなサービスを作る場合、ユニークなユーザ名とペアになるサロゲートキーをつけた方が良いかどうか?という疑問です。
|
1
疑問を明確にしました
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
DBの初学者です。Twitterがサロゲートキーを使う理由は何でしょうか?
|
2
2
|
|
3
3
|
|
4
4
|
|
@@ -6,7 +6,7 @@
|
|
6
6
|
|
7
7
|
Twitterのユーザ名は**「変更不可、長さ15文字まで。英数字(文字A~Z、数字0~9)とアンダースコアのみ利用可」**です。
|
8
8
|
|
9
|
-
この条件ならユーザ名をナチュラルキーとして利用できるので、サロゲートキーは不要だと思いますが、
|
9
|
+
この条件ならユーザ名をナチュラルキーとして利用できるので、サロゲートキーは不要だと思いますが、実際はどうなのでしょうか?
|
10
10
|
|
11
11
|
(こちらの[資料](https://www.atmarkit.co.jp/news/201004/19/twitter.html)で、[つぶやきテーブルにユーザ名の代わりにサロゲートキーを利用](https://www.atmarkit.co.jp/news/201004/19/twitter02.png)しているようでした)
|
12
12
|
|
@@ -42,4 +42,4 @@
|
|
42
42
|
|
43
43
|
Twitterがサロゲートキーを採用した理由はrailsを利用していたことや、将来のユーザ名変更にも対応できる柔軟性のためかもしれません。
|
44
44
|
|
45
|
-
本投稿では単純化のため、フレームワークの都合や将来のユーザ名の変更は無視できるものとして、Twitterのようなサービスにおいて、ユニークなユーザ名とペアになるサロゲートキーをつけた方が良いかどうか、
|
45
|
+
本投稿では単純化のため、フレームワークの都合や将来のユーザ名の変更は無視できるものとして、Twitterのようなサービスにおいて、ユニークなユーザ名とペアになるサロゲートキーをつけた方が良いかどうか、ご意見をお聞かせ下さい!
|