質問編集履歴

3

データベース格納例に文字列が格納されるケースを追加

2020/03/09 09:05

投稿

pokorin
pokorin

スコア4

test CHANGED
File without changes
test CHANGED
@@ -34,156 +34,156 @@
34
34
 
35
35
  ・各機種ごとに設定できる項目一覧
36
36
 
37
+ |機種 |端末名称|IPアドレス|明るさ|音量|WEB設定ログインID|
38
+
39
+ |------|--------|----------|------|----|----|
40
+
41
+ |機種A| 〇  | 〇 | 〇  |〇 |〇|
42
+
43
+ |機種B| 〇  | 〇 | ―  |〇 ||
44
+
45
+ |機種C| 〇  | 〇 | 〇  |― ||
46
+
47
+
48
+
49
+ これらのデータをRDBにどのように保管するか悩んでいます。
50
+
51
+ 端末IDで各端末はユニークになります。
52
+
53
+
54
+
55
+ ###### 案1:共通項目だけまとめ、個別項目は別テーブルに書き出す
56
+
57
+
58
+
59
+ 端末テーブル(端末ID(PK)、機種ID、端末名称、IPアドレス等)
60
+
61
+ 機種Aテーブル(端末ID(PK)、明るさ、音量、Web設定ログインID)
62
+
63
+ 機種Bテーブル(端末ID(PK)、音量)
64
+
65
+ 機種Cテーブル(端末ID(PK)、明るさ)
66
+
67
+
68
+
69
+ **イメージ**
70
+
71
+ **端末テーブル**
72
+
73
+ |端末ID|機種ID |端末名称|IPアドレス|
74
+
75
+ |------|------|--------|----------|
76
+
77
+ |1|機種A| a1   | x.x.x.1 |
78
+
79
+ |2|機種A| a2   | x.x.x.2 |
80
+
81
+ |3|機種B| b1   | x.x.x.3 |
82
+
83
+ |4|機種B| b2   | x.x.x.4 |
84
+
85
+ |5|機種C| c1   | x.x.x.5 |
86
+
87
+
88
+
89
+ **機種Aテーブル**
90
+
91
+ |端末ID|明るさ|音量|Web設定ログインID|
92
+
93
+ |------|------|----|----|
94
+
95
+ |1| 3  |5 |ADMIN|
96
+
97
+ |2|3  |5 |ADMIN|
98
+
99
+
100
+
101
+ **機種Bテーブル**
102
+
103
+ |端末ID|音量|
104
+
105
+ |------|------|
106
+
107
+ |3|5 |
108
+
109
+ |4|5 |
110
+
111
+
112
+
113
+ **機種Cテーブル**
114
+
115
+ |端末ID|明るさ|
116
+
117
+ |------|------|
118
+
119
+ |5|5 |
120
+
121
+
122
+
123
+
124
+
125
+ ###### 案2:1つのテーブルでまとめて管理する
126
+
127
+
128
+
129
+ 端末テーブル(端末ID(PK)、端末種別、端末名称、IPアドレス、明るさ、音量)
130
+
131
+
132
+
133
+ **・イメージ**
134
+
135
+ **端末テーブル**
136
+
137
+ |端末ID|機種ID |端末名称|IPアドレス|明るさ|音量|WEB設定ログインID|
138
+
139
+ |------|------|--------|----------|------|----|----|
140
+
141
+ |1|機種A| a1   | x.x.x.1 | 3  |5 |ADMIN|
142
+
143
+ |2|機種A| a2   | x.x.x.2 | 3  |5 |ADMIN|
144
+
145
+ |3|機種B| b1   | x.x.x.3 | NULL  |5 |NULL|
146
+
147
+ |4|機種B| b2   | x.x.x.4 | NULL  |5 |NULL|
148
+
149
+ |5|機種C| c1   | x.x.x.5 | 4  |NULL |NULL|
150
+
151
+
152
+
153
+ ---
154
+
155
+ 私の感覚でいえば以下のように、案2は矛盾したデータの登録が可能であるため、案1がいいと思っています。
156
+
157
+
158
+
159
+ **例:**
160
+
161
+ ※機種Bに設定できてはいけない「明るさ」が設定されているが、DB制約で防げない(更新時異状)
162
+
163
+
164
+
165
+ |端末ID|機種ID |端末名称|IPアドレス|明るさ|音量|
166
+
167
+ |------|------|--------|----------|------|----|
168
+
169
+ |3|機種B| b1   | x.x.x.3 | **3**  |5 |
170
+
171
+
172
+
173
+
174
+
175
+ .Netアプリのインターフェースはエクセルのような見た目のグリッド型で、複数の機種を同じ画面で設定できるようにする必要があります。
176
+
177
+ 以下のようなイメージです。
178
+
179
+
180
+
181
+ **・画面出力イメージ**
182
+
37
183
  |機種 |端末名称|IPアドレス|明るさ|音量|
38
184
 
39
185
  |------|--------|----------|------|----|
40
186
 
41
- |機種A| 〇  | 〇 | 〇  |〇 |
42
-
43
- |機種B| 〇  | 〇 | ―  |〇 |
44
-
45
- |機種C| 〇  | 〇 | 〇  |― |
46
-
47
-
48
-
49
- これらのデータをRDBにどのように保管するか悩んでいます。
50
-
51
- 端末IDで各端末はユニークになります。
52
-
53
-
54
-
55
- ###### 案1:共通項目だけまとめ、個別項目は別テーブルに書き出す
56
-
57
-
58
-
59
- 端末テーブル(端末ID(PK)、機種ID、端末名称、IPアドレス等)
60
-
61
- 機種Aテーブル(端末ID(PK)、明るさ、音量)
62
-
63
- 機種Bテーブル(端末ID(PK)、音量)
64
-
65
- 機種Cテーブル(端末ID(PK)、明るさ)
66
-
67
-
68
-
69
- **イメージ**
70
-
71
- **端末テーブル**
72
-
73
- |端末ID|機種ID |端末名称|IPアドレス|
74
-
75
- |------|------|--------|----------|
76
-
77
- |1|機種A| a1   | x.x.x.1 |
78
-
79
- |2|機種A| a2   | x.x.x.2 |
80
-
81
- |3|機種B| b1   | x.x.x.3 |
82
-
83
- |4|機種B| b2   | x.x.x.4 |
84
-
85
- |5|機種C| c1   | x.x.x.5 |
86
-
87
-
88
-
89
- **機種Aテーブル**
90
-
91
- |端末ID|明るさ|音量|
92
-
93
- |------|------|----|
94
-
95
- |1| 3  |5 |
96
-
97
- |2|3  |5 |
98
-
99
-
100
-
101
- **機種Bテーブル**
102
-
103
- |端末ID|音量|
104
-
105
- |------|------|
106
-
107
- |3|5 |
108
-
109
- |4|5 |
110
-
111
-
112
-
113
- **機種Cテーブル**
114
-
115
- |端末ID|明るさ|
116
-
117
- |------|------|
118
-
119
- |5|5 |
120
-
121
-
122
-
123
-
124
-
125
- ###### 案2:1つのテーブルでまとめて管理する
126
-
127
-
128
-
129
- 端末テーブル(端末ID(PK)、端末種別、端末名称、IPアドレス、明るさ、音量)
130
-
131
-
132
-
133
- **・イメージ**
134
-
135
- **端末テーブル**
136
-
137
- |端末ID|機種ID |端末名称|IPアドレス|明るさ|音量|
138
-
139
- |------|------|--------|----------|------|----|
140
-
141
- |1|機種A| a1   | x.x.x.1 | 3  |5 |
142
-
143
- |2|機種A| a2   | x.x.x.2 | 3  |5 |
144
-
145
- |3|機種B| b1   | x.x.x.3 | NULL  |5 |
146
-
147
- |4|機種B| b2   | x.x.x.4 | NULL  |5 |
148
-
149
- |5|機種C| c1   | x.x.x.5 | 4  |NULL |
150
-
151
-
152
-
153
- ---
154
-
155
- 私の感覚でいえば以下のように、案2は矛盾したデータの登録が可能であるため、案1がいいと思っています。
156
-
157
-
158
-
159
- **例:**
160
-
161
- ※機種Bに設定できてはいけない「明るさ」が設定されているが、DB制約で防げない(更新時異状)
162
-
163
-
164
-
165
- |端末ID|機種ID |端末名称|IPアドレス|明るさ|音量|
166
-
167
- |------|------|--------|----------|------|----|
168
-
169
- |3|機種B| b1   | x.x.x.3 | **3**  |5 |
170
-
171
-
172
-
173
-
174
-
175
- .Netアプリのインターフェースはエクセルのような見た目のグリッド型で、複数の機種を同じ画面で設定できるようにする必要があります。
176
-
177
- 以下のようなイメージです。
178
-
179
-
180
-
181
- **・画面出力イメージ**
182
-
183
- |機種 |端末名称|IPアドレス|明るさ|音量|
184
-
185
- |------|--------|----------|------|----|
186
-
187
187
  |機種A| a1   | x.x.x.1 | 3   |5 |
188
188
 
189
189
  |機種A| a2   | x.x.x.2 | 3   |5 |

2

修正依頼の反映

2020/03/09 09:05

投稿

pokorin
pokorin

スコア4

test CHANGED
File without changes
test CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
 
4
4
 
5
- 複数の電子機器に一括で設定反映する.Netアプリを開発しているのですが、
5
+ IPプロトコル対応したネットワークカメラやネットワークスピーカーに一括で設定反映する.Netアプリを開発しているのですが、データベース設計に悩んでいます。
6
-
7
- データベース設計に悩んでいます。
6
+
8
-
7
+
8
+
9
- 皆様意見を参考にして、よりよ設計したい考えています。
9
+ 実際機器は学校のうな広場所ネットワークカメラ5台、ネットワークスピーカ5台といった形で設置されます。
10
10
 
11
11
 
12
12
 
@@ -14,15 +14,25 @@
14
14
 
15
15
 
16
16
 
17
- 電子器の機種は計15品番程度あり、それぞれで設定できる項目が違います。
17
+ 機種は計15品番程度あり、それぞれで設定できる項目が違います。
18
18
 
19
19
  一方、共通で設定する項目もあります。
20
20
 
21
21
 
22
22
 
23
+ IPアドレスや端末名称は全機種設定できる、
24
+
25
+ ネットワークカメラは音量は設定できないが明るさは設定できる、
26
+
27
+ ネットワークスピーカーは明るさは設定できないが音量は設定できる、等
28
+
29
+
30
+
23
- イメージとしては以下の通りす。
31
+ イメージとしては以下の通りす。
32
+
33
+
34
+
24
-
35
+ ・各機種ごとに設定できる項目一覧
25
-
26
36
 
27
37
  |機種 |端末名称|IPアドレス|明るさ|音量|
28
38
 
@@ -36,15 +46,17 @@
36
46
 
37
47
 
38
48
 
39
- これらのデータをRDBにどのように保管するか悩んでいます。
49
+ これらのデータをRDBにどのように保管するか悩んでいます。
50
+
40
-
51
+ 端末IDで各端末はユニークになります。
41
-
42
-
52
+
53
+
54
+
43
- 案1:共通項目だけまとめ、個別項目は別テーブルに書き出す
55
+ ###### 案1:共通項目だけまとめ、個別項目は別テーブルに書き出す
44
-
45
-
46
-
56
+
57
+
58
+
47
- 端末テーブル(端末ID(PK)、端末、端末名称、IPアドレス等)
59
+ 端末テーブル(端末ID(PK)、ID、端末名称、IPアドレス等)
48
60
 
49
61
  機種Aテーブル(端末ID(PK)、明るさ、音量)
50
62
 
@@ -54,9 +66,63 @@
54
66
 
55
67
 
56
68
 
57
-
69
+ **イメージ**
70
+
58
-
71
+ **端末テーブル**
72
+
73
+ |端末ID|機種ID |端末名称|IPアドレス|
74
+
75
+ |------|------|--------|----------|
76
+
77
+ |1|機種A| a1   | x.x.x.1 |
78
+
79
+ |2|機種A| a2   | x.x.x.2 |
80
+
81
+ |3|機種B| b1   | x.x.x.3 |
82
+
83
+ |4|機種B| b2   | x.x.x.4 |
84
+
85
+ |5|機種C| c1   | x.x.x.5 |
86
+
87
+
88
+
89
+ **機種Aテーブル**
90
+
91
+ |端末ID|明るさ|音量|
92
+
93
+ |------|------|----|
94
+
95
+ |1| 3  |5 |
96
+
97
+ |2|3  |5 |
98
+
99
+
100
+
101
+ **機種Bテーブル**
102
+
103
+ |端末ID|音量|
104
+
105
+ |------|------|
106
+
107
+ |3|5 |
108
+
109
+ |4|5 |
110
+
111
+
112
+
113
+ **機種Cテーブル**
114
+
115
+ |端末ID|明るさ|
116
+
117
+ |------|------|
118
+
119
+ |5|5 |
120
+
121
+
122
+
123
+
124
+
59
- 案2:1つのテーブルでまとめて管理する
125
+ ###### 案2:1つのテーブルでまとめて管理する
60
126
 
61
127
 
62
128
 
@@ -64,27 +130,69 @@
64
130
 
65
131
 
66
132
 
133
+ **・イメージ**
134
+
135
+ **端末テーブル**
136
+
137
+ |端末ID|機種ID |端末名称|IPアドレス|明るさ|音量|
138
+
139
+ |------|------|--------|----------|------|----|
140
+
141
+ |1|機種A| a1   | x.x.x.1 | 3  |5 |
142
+
143
+ |2|機種A| a2   | x.x.x.2 | 3  |5 |
144
+
145
+ |3|機種B| b1   | x.x.x.3 | NULL  |5 |
146
+
147
+ |4|機種B| b2   | x.x.x.4 | NULL  |5 |
148
+
149
+ |5|機種C| c1   | x.x.x.5 | 4  |NULL |
150
+
151
+
152
+
67
153
  ---
68
154
 
69
- 私の感覚でいえば更新時異状発生しない案1で行きたいところなのでが、
155
+ 私の感覚でいえば以下のように、案2は矛盾したデータの登録可能であるため、案1思っていま
156
+
157
+
158
+
70
-
159
+ **例:**
160
+
161
+ ※機種Bに設定できてはいけない「明るさ」が設定されているが、DB制約で防げない(更新時異状)
162
+
163
+
164
+
165
+ |端末ID|機種ID |端末名称|IPアドレス|明るさ|音量|
166
+
167
+ |------|------|--------|----------|------|----|
168
+
169
+ |3|機種B| b1   | x.x.x.3 | **3**  |5 |
170
+
171
+
172
+
173
+
174
+
71
- 設定のインターフェースはグリッド型で、複数の機種を同じ画面で
175
+ .Netアプリのインターフェースはエクセルのような見た目のグリッド型で、複数の機種を同じ画面で設定できるようにする必要があります。
72
-
73
- 設定できるようにする必要があります。
74
176
 
75
177
  以下のようなイメージです。
76
178
 
77
179
 
78
180
 
181
+ **・画面出力イメージ**
182
+
79
183
  |機種 |端末名称|IPアドレス|明るさ|音量|
80
184
 
81
185
  |------|--------|----------|------|----|
82
186
 
83
- |機種A| a   | x.x.x.a | 3   |5 |
187
+ |機種A| a1   | x.x.x.1 | 3   |5 |
188
+
84
-
189
+ |機種A| a2   | x.x.x.2 | 3   |5 |
190
+
85
- |機種B| b   | x.x.x.b |   |5 |
191
+ |機種B| b1   | x.x.x.3 | 設定不可  |5 |
192
+
86
-
193
+ |機種B| b2   | x.x.x.4 | 設定不可  |5 |
194
+
87
- |機種C| c   | x.x.x.c | 6   | |
195
+ |機種C| c1   | x.x.x.5 | 6   |設定不可 |
88
196
 
89
197
 
90
198
 
@@ -92,7 +200,105 @@
92
200
 
93
201
 
94
202
 
203
+ 具体的には、上記 **・画面出力イメージ** の結果を得ようとした場合、以下のような長いSQLを書く必要があります。
204
+
205
+
206
+
207
+ ```SQL
208
+
209
+ SELECT
210
+
211
+ 端末テーブル.機種ID,
212
+
213
+ 端末テーブル.端末名称,
214
+
215
+ 端末テーブル.IPアドレス,
216
+
217
+ 機種Aテーブル.明るさ,
218
+
219
+ 機種Aテーブル.音量
220
+
221
+ FROM
222
+
223
+ 端末テーブル
224
+
225
+ LEFT JOIN
226
+
227
+ 機種Aテーブル
228
+
229
+ ON
230
+
231
+ 端末テーブル.端末ID = 機種Aテーブル.端末ID
232
+
233
+
234
+
235
+ UNION ALL
236
+
237
+
238
+
239
+ SELECT
240
+
241
+ 端末テーブル.機種ID,
242
+
243
+ 端末テーブル.端末名称,
244
+
245
+ 端末テーブル.IPアドレス,
246
+
247
+ NULL,
248
+
249
+ 機種Bテーブル.音量
250
+
251
+ FROM
252
+
253
+ 端末テーブル
254
+
255
+ LEFT JOIN
256
+
257
+ 機種Bテーブル
258
+
259
+ ON
260
+
261
+ 端末テーブル.端末ID = 機種Bテーブル.端末ID
262
+
263
+
264
+
265
+ UNION ALL
266
+
267
+
268
+
269
+ SELECT
270
+
271
+ 端末テーブル.機種ID,
272
+
273
+ 端末テーブル.端末名称,
274
+
275
+ 端末テーブル.IPアドレス,
276
+
277
+ 機種Cテーブル.明るさ,
278
+
279
+ NULL
280
+
281
+ FROM
282
+
283
+ 端末テーブル
284
+
285
+ LEFT JOIN
286
+
287
+ 機種Cテーブル
288
+
289
+ ON
290
+
291
+ 端末テーブル.端末ID = 機種Cテーブル.端末ID
292
+
293
+
294
+
295
+ ```
296
+
297
+
298
+
95
- 一方案2にすると、機種Bのデータを保存するテーブルに、意味のない「明るさ」というフィールドが出来てしまいます。
299
+ 一方案2にすると、SELECT文、UPDATE文はシンプルになるものの、機種Bのデータを保存するテーブルに、意味のない「明るさ」というフィールドが出来てしまいます。
300
+
301
+ またUpdate文も、最大4テーブルたいして行う必要が出てきます。
96
302
 
97
303
 
98
304
 

1

追記を記載

2020/03/09 09:01

投稿

pokorin
pokorin

スコア4

test CHANGED
File without changes
test CHANGED
@@ -99,3 +99,9 @@
99
99
  どちらも一長一短なのですが、皆様だったらどのような設計をされますか?
100
100
 
101
101
  屈託のない意見を頂きたく宜しくお願いします。
102
+
103
+
104
+
105
+ 追記:
106
+
107
+ なお、設定項目は全部で800項目ちかくあり、共通設定項目はそのうち40~80個程度です。