質問編集履歴

2

ソースコードにコメントを追加しました

2024/03/06 16:33

投稿

munekun
munekun

スコア40

test CHANGED
File without changes
test CHANGED
@@ -64,6 +64,8 @@
64
64
 
65
65
  CREATE TABLE UserIdPatterns (
66
66
  user_id_pattern_id INT AUTO_INCREMENT PRIMARY KEY,
67
+
68
+ -- "1,2,3,,," のように、User.user_id をカンマ区切りで持つ
67
69
  user_ids VARCHAR(3068) NOT NULL UNIQUE
68
70
  );
69
71
 

1

自分なりに変更したソースコードを追加しました

2024/03/06 16:31

投稿

munekun
munekun

スコア40

test CHANGED
File without changes
test CHANGED
@@ -19,11 +19,9 @@
19
19
 
20
20
  しかし要件2がわかりません。といいますのは、`user_ids`カラムにインデックスの最大値とされる3068バイトを持たせても、`INT(10)`のユーザが1万人は入りきらないためです。
21
21
 
22
-
23
-
24
22
  ### 該当のソースコード
25
23
 
26
- ```MySQL
24
+ ```SQL
27
25
  CREATE TABLE UserGroup (
28
26
  group_id INT AUTO_INCREMENT PRIMARY KEY,
29
27
 
@@ -42,17 +40,41 @@
42
40
  ### 試したこと・調べたこと
43
41
  - [x] teratailやGoogle等で検索した
44
42
  - [x] ソースコードを自分なりに変更した
45
- - [x] 知人に聞いた
43
+ - [ ] 知人に聞いた
46
44
  - [ ] その他
47
45
 
48
- ##### 上記の詳細・結果
46
+ ##### teratailやGoogle等で検索した
49
47
  グループという名でネット検索すると、GROUP_CONCAT などの処理が出てしまい、今回の要件のような情報を見つけることはできませんでした。
50
48
 
51
49
  そして、ChatGPT に聞いてもろくな返答はありませんでした。
52
50
 
51
+ ##### ソースコードを自分なりに変更した1
53
- また、`User` テーブルに新たに`user_unique`カラムを置いてそこに数字だけでなく英数記号の値を持たせ、`UserGroup`テーブルは`user_ids`でなく`user_uniques`とでもすれば、数字だけより多人数を管理できますが、やっぱりそれでも要件2を満たすには足りません。
52
+ `User` テーブルに新たに`user_unique`カラムを置いてそこに数字だけでなく英数記号の値を持たせ、`UserGroup`テーブルは`user_ids`でなく`user_uniques`とでもすれば、数字だけより多人数を管理できますが、やっぱりそれでも要件2を満たすには足りません。
54
53
 
54
+ ##### ソースコードを自分なりに変更した2
55
- すると残るは、`UserGroup.user_ids`という1つのカラムにまとめるのではなく、3068バイトずつ分割して別のテーブルに持たせ、それらのレコードのIDを繋げた値を`UserGroup`テーブルに持たせるとかになるのでしょうか?あまりに不細工というか、ちょっとヘンだと思います。
55
+ すると残るは、`UserGroup.user_ids`という1つのカラムにまとめるのではなく、3068バイトずつ分割して別のテーブルに持たせ、それらのレコードのIDを繋げた値を`UserGroup.user_id_pattern_ids`として持たせるとかになるのでしょうか?あまりに不細工というか、ちょっとヘンだと思います。
56
+
57
+ ```SQL
58
+ CREATE TABLE UserGroup (
59
+ group_id INT AUTO_INCREMENT PRIMARY KEY,
60
+
61
+ -- "1,2,3,,," のように、UserIdPatterns.user_id_pattern_id をカンマ区切りで持つ
62
+ user_id_pattern_ids VARCHAR(3068) NOT NULL UNIQUE
63
+ );
64
+
65
+ CREATE TABLE UserIdPatterns (
66
+ user_id_pattern_id INT AUTO_INCREMENT PRIMARY KEY,
67
+ user_ids VARCHAR(3068) NOT NULL UNIQUE
68
+ );
69
+
70
+ -- 以下は最初のコードと一緒
71
+ CREATE TABLE User (
72
+ user_id INT(10) AUTO_INCREMENT PRIMARY KEY,
73
+ user_name VARCHAR(255) NOT NULL,
74
+ group_id INT,
75
+ FOREIGN KEY (group_id) REFERENCES UserGroup(group_id)
76
+ );
77
+ ```
56
78
 
57
79
  もし良い方法があったら教えてください。
58
80