X



トップページDB@2ch掲示板
1002コメント323KB
DB設計を語るスレ 10 [無断転載禁止]©2ch.net
レス数が1000を超えています。これ以上書き込みはできません。
0449NAME IS NULL
垢版 |
2018/10/25(木) 09:51:00.34ID:???
YouTube を実際に使っているユーザーがいないんじゃ?
0450NAME IS NULL
垢版 |
2018/12/13(木) 23:16:46.44ID:Ht+aqMlR
YouTube を仮に使ってるユーザーぐらいいるんじゃね?
0451NAME IS NULL
垢版 |
2018/12/26(水) 10:07:27.12ID:IDBXTEXd
特殊な炭素素材で水を水素と酸素に分解 ゼビオHDのグループ企業、クロステクノロジーラボが開発
0452NAME IS NULL
垢版 |
2019/03/20(水) 08:24:10.88ID:???
500項目超とかの巨大テーブルいい加減ヤメてほしい
0453NAME IS NULL
垢版 |
2019/03/30(土) 17:46:10.62ID:???
>>452
DBMS何使ったらそうなんの?オラコー?
0454NAME IS NULL
垢版 |
2019/03/30(土) 17:52:56.67ID:klkn0vtv
紙の業務の置き換えで
10明細x50の伝票!あと10年は変更ありません!
とかだとよくやる。官公庁だあとありがち。
正規化するといちいちJOIN書かないといかんし
0455NAME IS NULL
垢版 |
2019/03/30(土) 19:41:39.53ID:???
>>452
見たのは確かOracle
項目多過ぎでSQLが実行できない
0456NAME IS NULL
垢版 |
2019/03/30(土) 22:37:17.45ID:???
COBOLで書かれたような奴の移植ならよくある
0457NAME IS NULL
垢版 |
2019/05/31(金) 20:09:56.83ID:h9fg3gjJ
主キーをサロゲートキー(serial)にするか、複合カラムの組み合わせでUNIQUE制約をつけて主キーっぽく使うかで悩んでいます。
問題なのが、このテーブルはレコードを削除した後、復活(再度、新規登録)させる必要が出てくる可能性があることです。
その場合、復活させた時に番号が変わるserialを主キーにするのは、ありえないですよね?
0458NAME IS NULL
垢版 |
2019/05/31(金) 20:48:12.74ID:???
そのDBがserial値の明示的挿入を許して、それが滅多に起きないんならなくはないんじゃね

それ以前におれなら復活必要なら論理削除にしとくが
0459NAME IS NULL
垢版 |
2019/05/31(金) 23:33:17.50ID:???
データレコード削除してもサロゲートキーのマスター残しておけば問題ないんでないの。
0460NAME IS NULL
垢版 |
2019/06/04(火) 20:14:47.94ID:???
サロゲートキーのマスターとは?

ここで言ってるserialってのは、システム側で管理して勝手に数値入れてくれるものだと思うが
0461NAME IS NULL
垢版 |
2019/06/04(火) 20:52:02.44ID:???
単なるserial;はふつうサロゲートキーとは言わんだろう。
>>457のように一意性を保証する複合主キーが存在したうえでその代理とするのがサロゲートキー。
んだから元の複合主キーとserialからなるのがマスターだしそれが自動採番されることは矛盾しない。
0462NAME IS NULL
垢版 |
2019/06/04(火) 21:03:46.49ID:???
で、データレコード削除しても残るサロゲートキーのマスターって何?って話だが

自動採番(システム管理)される値をサロゲートキーにするって前提じゃないの?
0463NAME IS NULL
垢版 |
2019/06/04(火) 21:33:06.85ID:???
だから複合主キーとサロゲートキーの対応表だよ。そう書いたつもりだったが。
>>457のようにデータ再投入時にサロゲートキーの値が変わるのを防ぎたいなら
そういうマスターを残しておけばいいという話。
採番が自動か手動かはこの際関係ない。
0464NAME IS NULL
垢版 |
2019/06/05(水) 00:34:03.47ID:???
>>463
そういうマスターを残すには手動でそういうマスターを作らないとダメなわけで
前提を合わす気がないならちゃんとそういっとかないと議論にならん
0465NAME IS NULL
垢版 |
2019/06/05(水) 00:38:31.46ID:???
serialを変えたくないってことは、
その様な使い方を別なところでしているんじゃないかな
ログとか履歴とか
0466NAME IS NULL
垢版 |
2019/06/05(水) 08:10:00.40ID:???
>>464
既に何度も書いているが、そのマスターのサロゲートキーはserialで自動採番して全然問題ないんだが?

あるいは、もともとデータテーブルが1テーブルだったものをマスターテーブルと分離したことを言っているなら
そりゃ当たり前だ。そう提案したんだからな。
0467NAME IS NULL
垢版 |
2019/06/26(水) 12:08:55.23ID:???
大阪市は2019年6月24日、6月7日から翌8日にかけて発生した基幹系システムの障害に
ついて、原因を特定したと明らかにした。米オラクル(Oracle)のデータベース(DB)ソフト
「Oracle Database」のバグが原因だった。

https://egg.5ch.net/test/read.cgi/bizplus/1561468154/
0468NAME IS NULL
垢版 |
2019/06/26(水) 12:32:28.72ID:???
やっぱ脱Oracleだな
ろくに保守サポートされないんだから有料契約の意味がない
0469NAME IS NULL
垢版 |
2019/06/26(水) 19:39:47.63ID:???
でも金で解決してくれるサポートがなけりゃ、問題がDBMS側にあることを
突き止めることすら自前でやらなきゃならんのだぜ。
0470NAME IS NULL
垢版 |
2019/06/26(水) 19:52:43.63ID:???
突き止めることに意味がないからな

責任転嫁のための作業であって
復旧にはどのみち問い合わせじゃ間に合わん
0471NAME IS NULL
垢版 |
2019/06/26(水) 20:14:47.85ID:???
原因がわからなきゃ対策のとりようもないだろう。
「たまたまエラーになったけど原因がわからないからまた起きたらゴメンね。」で済むような仕事ならいいが。
0472NAME IS NULL
垢版 |
2019/06/27(木) 18:25:28.42ID:???
オラクルは、問題がDBMSにあることをつきとめるんじゃなくて、その問題をまず認めてもらうのにサポート窓口が必要なんだよ

あとは直ればラッキーぐらい
0473NAME IS NULL
垢版 |
2019/07/14(日) 19:52:47.78ID:???
> 大阪市で住民票などの証明書発行業務を担う基幹システムが停止。復旧まで21時間を要し、
> 8000件近い証明書発行業務に影響が及んだ。原因はOracle Databaseのクラスタ機能に潜む
> バグだった。ネットワークの不調をきっかけにシステムが停止し、再起動もできなくなった。
> 米オラクルはバグの存在を把握しながら対外開示をしていなかったとみられる。

https://tech.nikkeibp.co.jp/atcl/nxt/mag/nc/18/020600011/070200035/
0474NAME IS NULL
垢版 |
2019/07/14(日) 20:10:01.55ID:???
Oracleに金払う意味あるぅ?
0475NAME IS NULL
垢版 |
2019/07/15(月) 19:18:49.04ID:???
それゆえMySQLとかPostgreSQL移行が進んでる
0477NAME IS NULL
垢版 |
2019/08/21(水) 20:28:50.39ID:???
デシジョンテーブルのつくりかたがわからん
値の組み合わせ全部入れるもんなの?

null値はすべての検索値にマッチとかルール決めて行数減らしたけど
わけわかめになった
0478NAME IS NULL
垢版 |
2019/09/01(日) 05:17:00.26ID:Kcb9iNar
売上を管理するテーブルを設計したいんですが、
後になって、同じ商品コードに別の商品が割り当てられる事も想定して設計する場合、
売上テーブルには、商品コードと商品名と価格すべてを登録するのが普通でしょうか?

※売り上げに登録する商品は、商品コードと商品名と価格だけで管理すると仮定します。
0479NAME IS NULL
垢版 |
2019/09/01(日) 06:36:54.70ID:???
>>478
その意味のない商品コードとやらで何をしたいんだ?
商品名と価格だけでいいだろ
0480NAME IS NULL
垢版 |
2019/09/01(日) 09:57:23.82ID:e+zeE2vd
>>478
商品マスタに有効期間を作るのが定石かなあ
ついでに言うと当時の単価もマスタ側で
売り上げは数量かなあ
(集計用に金額持たせることはある)
あと消費税の扱いをどうするかとか考えておいたほうがいい
0481NAME IS NULL
垢版 |
2019/09/01(日) 16:19:32.45ID:???
>>478
自分ならというか自分が作ったシステムの売上データは個数、単価、価格などを保持してる
マスタから参照するのはコードと商品名ぐらい
マスタのコードは別の商品に変わる可能性があるなら売上データと商品マスタを結合するキーは
商品コードでなく商品マスタのサロゲートキー
0482NAME IS NULL
垢版 |
2019/09/01(日) 16:38:47.41ID:???
>同じ商品コードに別の商品が割り当てられる事も想定して

これがどういう状況を表しているのかはっきりさせないと設計も決められないだろ。
少なくとも「商品コード」で「商品」を特定できないことは読み取れるが、じゃあ
「商品コード」と「商品名」であれば特定できるのかそれともそうじゃないのか。
できるなら>>478のままでいいが、できないならばそれを特定できる情報を
追加しなければならない。
0483NAME IS NULL
垢版 |
2019/09/01(日) 16:51:19.34ID:???
商品名や容量が変わるなんてのはよくあること
0484NAME IS NULL
垢版 |
2019/09/01(日) 17:30:57.16ID:???
同じ商品コードを別の商品に割り当てるって言うんだから、ある商品の商品名を
変更するって話とは全然違うわな。
0485NAME IS NULL
垢版 |
2019/09/01(日) 17:43:49.61ID:???
商品コードが一意にならないって理解しにくいんだが
商品コードを仕入れ先の企業が決めてくるって事?
0486NAME IS NULL
垢版 |
2019/09/01(日) 17:54:03.12ID:???
おそらく現実の問題ではなくて、>>478が深く考えないで書いた脳内想定だと思う。
0487NAME IS NULL
垢版 |
2019/09/02(月) 04:29:38.29ID:???
現実的に、商品コードが一意にならないような要求をする客はいるぞ

もし本当に
>売り上げに登録する商品は、商品コードと商品名と価格だけで管理する
のならば、全情報コピーでいいだろ
現実的にはそんな単純な管理条件にはならんけどな
0488NAME IS NULL
垢版 |
2019/09/02(月) 12:28:21.25ID:???
>>487
> 現実的に、商品コードが一意にならないような要求をする客はいるぞ
そりゃいるだろうよ
だから外部とやり取りするためのコードと内部で処理するためのコードは別に持ったりする
0489NAME IS NULL
垢版 |
2019/09/02(月) 15:56:14.03ID:???
横着して客が提示した項目だけでまかなおうとするからコケル
0490NAME IS NULL
垢版 |
2019/09/20(金) 22:43:01.69ID:isalmAv1
>>467
ラックに限らずクラスタリングってもしもの時のバックアップとしては全く信用できない。
基本的に運が良ければダウン時間が短く済むかも程度で考えて、データのみ同期させる予備機もっとかないと。
0491NAME IS NULL
垢版 |
2019/10/13(日) 18:20:24.07ID:???
カラムに日本語使わないほうがいい
でもPHPでカラムを見ながら弄りたい
PHPやらhtmlでいちいち書くのは面倒くさい
ってんで、カラムの名前の日本語対応データだけもったtable作る
ってのは変ですか?
0492NAME IS NULL
垢版 |
2019/10/15(火) 01:36:43.91ID:???
日本語っていうか、論理名を物理名とは別に持って管理するのは珍しくない
0493NAME IS NULL
垢版 |
2019/10/15(火) 16:59:26.48ID:???
>>492
ありがとうございます
論理名 物理名というのですね
参考になる文献が結構出てきて助かりました
0494NAME IS NULL
垢版 |
2019/10/16(水) 07:52:35.26ID:???
多少長くなっても意味の通じるカラム名で管理した方が楽かな
0495NAME IS NULL
垢版 |
2019/10/16(水) 19:46:46.29ID:vHJKi6he
>>493
項目名が頻繁に変わるという仕様が本当に必要なのか考えた方がいい。
0496NAME IS NULL
垢版 |
2019/10/17(木) 01:46:16.06ID:???
どこから項目名が頻繁に変わるという仕様を導き出したんだ
0497NAME IS NULL
垢版 |
2019/10/17(木) 06:45:02.27ID:???
まあ強いて言えばわざわざ
> カラムの名前の日本語対応データだけもったtable作る
ってところじゃね?
0498NAME IS NULL
垢版 |
2019/10/17(木) 23:46:22.91ID:/2joG6dP
お腹がすいていませんか?
ウーバーイーツの利用者が初めての方は eats-5kqyfp のプロモーションコードを使うと、#Uber Eats の初回注文が ¥1,000 割引になります。https://t.co/Wxur8AeoEf 👀
Rock54: Caution(BBR-MD5:b73a9cd27f0065c395082e3925dacf01)
0499NAME IS NULL
垢版 |
2019/10/18(金) 04:25:29.95ID:???
PHPからデータを入力することを考えているのですが、初心者ゆえ取っ掛かりがわからなくて途方にくれています

例えば、
歴史的建造物のテーブルと
国のテーブルが有るとします

建造物のデータを入力する時に建造物の国カラムに、国のテーブルからオートコンプリートで入力したい
という場合、オートコンプリート用国候補のデータを"国"テーブルから取得して提示
という流れでいいのでしょうか?
この入力段階では建造物テーブルにリレーション?や結合といった処理で"国"の関連付け考えなくてもいいという感じでしょうか?
0501NAME IS NULL
垢版 |
2019/10/18(金) 19:29:58.26ID:d6MIxLxf
>>499
建造物情報と国情報が紐付いてないのに、なぜ「オートコンプリート」という言葉が出てくるのか?
0502NAME IS NULL
垢版 |
2019/10/18(金) 21:21:09.59ID:???
キー入力するんじゃねえの?
0503NAME IS NULL
垢版 |
2019/10/20(日) 20:29:56.45ID:???
つか、建物入力して、国を絞るのか?
法隆寺は日本にしかないだろうに

国を入力したら、建物のリストを候補にだすってんなら、国と建物の紐づけが必要
0504NAME IS NULL
垢版 |
2019/10/20(日) 20:53:49.69ID:???
法隆寺のデータをこれから入力しようって時に紐付けデータが先に存在しているわけなかろう。
0505NAME IS NULL
垢版 |
2019/10/20(日) 21:37:50.26ID:???
オートコンプリート用国候補のデータを"国"テーブルから取得して
0506NAME IS NULL
垢版 |
2019/10/22(火) 21:34:40.81ID:???
すでに歴史的建造物のテーブル(にレコード)があるって前提ではないのか
0507NAME IS NULL
垢版 |
2019/10/22(火) 21:43:02.01ID:???
>オートコンプリートとは、ユーザーによるキーボード入力履歴を活用して、
>入力操作の軽減を図る機能の一つである。

>オートコンプリートに対応したソフトでは、ユーザーが入力したい言葉の
>冒頭の文字を入れると、入力履歴の中から冒頭の文字が一致するものを
>候補として一覧で表示する。候補は、文字を入力していくごとに絞り込まれ、
>その一覧の中に入力したい言葉があれば、ユーザーは残りの文字を入力
>することなく、一覧から選ぶだけで入力が完了する。

こういうことなんじゃ?
0508NAME IS NULL
垢版 |
2019/10/22(火) 22:57:39.65ID:???
>>501
>>503
>>506

>建造物のデータを入力する時に建造物の国カラムに、国のテーブルからオートコンプリートで入力したい
0509NAME IS NULL
垢版 |
2019/10/23(水) 09:25:30.42ID:CtOyw4yf
>>508
だからどうしてそんな変なことを言っているのか?
0510NAME IS NULL
垢版 |
2019/10/23(水) 15:59:50.08ID:???
入力者の作業が簡単になるからじゃね?
0512NAME IS NULL
垢版 |
2019/10/23(水) 19:45:44.83ID:???
変なことっていうのは違うな
誰でも考えつくことだし
0513NAME IS NULL
垢版 |
2019/10/23(水) 20:18:26.30ID:???
>>499
・国名入力欄
・建造物名入力欄

があって、「国名入力欄に入力する際に国名をオートコンプリートしたい
(“に”って入力したら“日本”が候補にでてくる)」って認識でOk?

それとも「国名を入力したら建造物名入力欄の候補が絞り込まれる」ようにしたいってことを言ってる?
0514NAME IS NULL
垢版 |
2019/10/23(水) 20:43:21.25ID:???
>国のテーブルからオートコンプリート
>オートコンプリート用国候補のデータ

こう書いてあるんだから普通わかるだろ。
0515NAME IS NULL
垢版 |
2019/10/23(水) 22:00:30.83ID:CtOyw4yf
建造物と何ら関係なかったな
0516NAME IS NULL
垢版 |
2019/11/04(月) 00:05:11.75ID:???
年取ると、書いてないことを読んだり、
書いてあることを読めなかったりします
私もそうだから、よく分かります
0517NAME IS NULL
垢版 |
2019/11/22(金) 17:14:44.84ID:kYOxBcYU
「利用回数が制限されているユーザーとされていないユーザーがいる」
という条件だとします。

このとき、finiteカラム(int)が99であれば、99回利用できるとします。
利用するごとに1ずつ減っていくイメージです。

では、「無制限に利用できる」を表現したい場合、finiteカラムでできるのでしょうか?
それとも、infiniteカラムなどを追加し、そこが1(有効)のユーザーは
無制限に利用できるというような、フラグ的な使い方をすればいいのでしょうか?

どう設計するのがベストプラクティスかわかりません。教えて下さい。
0518NAME IS NULL
垢版 |
2019/11/22(金) 17:19:37.29ID:???
制限ユーザーかどうかを識別するカラムを追加か、
finiteが -1 なら無制限ユーザーとする、とか
0519NAME IS NULL
垢版 |
2019/11/22(金) 19:58:57.97ID:???
ベストプラクティスなんて、アプリの設計方法次第で変わるわ

とりあえずfiniteにNULLでいいだろ
NULLから1引いてもNULLだからな
0521517
垢版 |
2019/11/22(金) 21:24:33.78ID:???
>>518
なるほど。-1って考えはありませんでした。
聞いたことありませんが良さそうですね。

>>519
int型のカラムにNULL入れちゃうのは抵抗があります・・・
0522NAME IS NULL
垢版 |
2019/11/22(金) 21:49:00.10ID:???
個人的には、利用上限と利用回数で項目分けたい
あとで利用回数調べたりしがちだから

基本、利用上限>利用回数で判定して
運用上、アホみたいに利用されないなら
利用上限をintのMAX_VAlUEとかにしとけば
実質無制限になるし、同じ判定で済む
0523517
垢版 |
2019/11/22(金) 23:00:06.56ID:???
>>522
なるほど。その方が汎用性がありますね。

利用上限も制限がある場合は1〜99まで
無制限なら999とかにしておけばわかりやすいです。
-1だとorderの並び替えも難しいですが、999ならできますし
0525NAME IS NULL
垢版 |
2019/11/23(土) 21:33:05.59ID:???
finiteというカラム名がなんかアレ
0526NAME IS NULL
垢版 |
2019/11/26(火) 17:10:04.54ID:???
DB設計をどうするかと、データ取得はどういう順にしたいかは別の問題
0527NAME IS NULL
垢版 |
2019/11/28(木) 13:21:29.42ID:j6IzqXGN
モンスターマップのhtmlのデータをDB化しようとすると,
どんなスキーマにしておくと後々使えるでしょうかね.
0528NAME IS NULL
垢版 |
2019/11/28(木) 20:58:42.03ID:???
Create Table MonsterMap (
HTML varchar(max);
);
0530NAME IS NULL
垢版 |
2019/11/29(金) 09:41:54.28ID:???
>>528 中身をDB化したい場合.
ttps://monstermap.org/data/20191129.html
みたいなURLじゃなくて,その中身です.
名前,グーグルマップへのURL,住所 のフィクションデータが入っていて
ファイル名が日付で,中身には日本語の日付もある状態.
0531NAME IS NULL
垢版 |
2019/12/19(木) 10:39:22.96ID:iuFPOjkS
>>33
自分が関わったシステムではただの連番をPKにした
画面の方は検索機能で対応
0532NAME IS NULL
垢版 |
2019/12/19(木) 10:51:59.59ID:iuFPOjkS
>>499
PHPから、と言うより、WEBの入力画面で登録という解釈で良いのかな
国カラムって言い方が違和感あるけど、国項目だよね
保存ボタン押した時に国項目に入力した内容を建造物テーブルの国カラムに設定してINSERT、もしくはUPDATEするみたいな
関係云々はこの画面が建造物と国を関連を登録する機能じゃないのかな
0533NAME IS NULL
垢版 |
2020/01/24(金) 22:34:18.61ID:9xzHgBHv
>>532
国項目って言い方が違和感あるけど、国カラムだよね
0534NAME IS NULL
垢版 |
2020/01/24(金) 23:19:54.20ID:Z+86jpdA
>>533
日本語か英語の違いですw
0535NAME IS NULL
垢版 |
2020/01/29(水) 14:21:05.79ID:0X1l6BuN
運用中の既存のテーブルにカラムを一つ追加したい場合、どうするのがベストでしょうか?

普通に
ALTER TABLE `テーブル名` ADD `カラム名` TEXT NOT NULL AFTER `カラム名`

みたいなSQLを実行するだけでいいのでしょうか?
それともこれを実行するとなにか問題が起きる可能性はあるでしょうか?
運用想定までできてないので、トラブルが起きる可能性があれば教えて下さい
0536NAME IS NULL
垢版 |
2020/01/29(水) 15:17:24.94ID:???
>>535
特殊な事情がない限りALTER TABLEでカラム追加するのが普通
ただDBMSの種類・バージョン、テーブルの規模、カラム追加時の指定方法などによって
どういう考慮が必要かは変わってくるので製品のマニュアルを読んだほうがよい

例えばMySQLなら↓ここを読む
https://dev.mysql.com/doc/refman/8.0/en/innodb-online-ddl-operations.html#online-ddl-column-operations
https://dev.mysql.com/doc/refman/8.0/en/innodb-online-ddl-performance.html
0537NAME IS NULL
垢版 |
2020/01/29(水) 16:48:38.71ID:???
>>536
ありがとうございます。MySQLを使っています。
運用中のデータ(つまり、読み書きが行われている)ものに対して
テーブルの追加変更ってまずいと思ったのですが、そうでもないみたいですね
0538NAME IS NULL
垢版 |
2020/01/29(水) 19:00:39.24ID:???
>>537
もしバージョン5.x使ってるならそれなりにインパクトあるから
使ってるバージョンのマニュアル見てね
0539NAME IS NULL
垢版 |
2020/01/29(水) 19:12:12.64ID:???
ロックかけて行った方が安全だろうなあとは思う
0540NAME IS NULL
垢版 |
2020/01/31(金) 21:28:37.66ID:Ep/cOiXA
ロックて危険やから難しいんやで?
0541NAME IS NULL
垢版 |
2020/02/01(土) 03:03:34.39ID:???
ロックなしでスキーマ変更するのが安全だと?

可能なら本番稼働中のDBでやるような処理じゃないぞ
0542NAME IS NULL
垢版 |
2020/02/01(土) 18:17:36.11ID:jPi9eO5v
ハイハイお子ちゃまはおねんねしようねえw
0543NAME IS NULL
垢版 |
2020/02/01(土) 18:53:13.82ID:5RS/C4xX
ロックンロール
0544NAME IS NULL
垢版 |
2020/02/09(日) 21:54:49.46ID:???
すみません
SQL質疑応答19のスレ222でも質問した者なんですが
ブライマリキーって迷ったら全てのカラムに指定してもいいですか?
0545NAME IS NULL
垢版 |
2020/02/09(日) 21:58:21.18ID:???
それはアドバイスしても理解できるかどうか疑うレベル
0546NAME IS NULL
垢版 |
2020/02/09(日) 22:01:46.73ID:???
すんません冗談です
0547NAME IS NULL
垢版 |
2020/02/09(日) 22:07:40.17ID:vpKzpKVL
>>544
そーゆー時はidにしとけばええねん
0548NAME IS NULL
垢版 |
2020/02/09(日) 22:08:42.02ID:???
>>544
いいんじゃね?
お前さん以外は誰も困らんし
0549NAME IS NULL
垢版 |
2020/02/09(日) 22:10:54.01ID:???
こういうなりすます奴が出てくるので
質問者はageでやるかトリップ付けた方が良いです
0550NAME IS NULL
垢版 |
2020/02/11(火) 21:42:03.27ID:kogHpQHL
ageるとid出るんですか?
0551質問者
垢版 |
2020/02/11(火) 23:42:15.58ID:kogHpQHL
238 NAME IS NULL sage 2020/02/09(日) 18:00:13.65 ID:???
どうしてもkey を変えたくないなら元情報用カラムをついかして元情報をそこに残すしかし複数の変更履歴残したいならば、変更用トランザクションデータを残して置けば変更履歴は追える




トランザクションデータというのはsqliteでも使えるのでしょうか?
別のテーブルを作って 変更のlogを保存するという方法はどうでしょうかね
0552NAME IS NULL
垢版 |
2020/02/11(火) 23:56:09.78ID:???
ここでいうトランザクションデータというのは、個別の取引レコードの事だと思う
登録するデータの内容とそれが追加か更新か(必要なら削除も)の処理内容を追記するテーブルを用意する
おそらくあなたの考えているLogと同じ事ではないかと思う。もちろんsqliteでも使える
0553NAME IS NULL
垢版 |
2020/02/12(水) 20:49:06.79ID:08I8SsIH
いまどきマスターとかトランザクションとか言っとるジジイは放置でええねん
0554NAME IS NULL
垢版 |
2020/02/12(水) 21:05:19.11ID:vYRA4Gos
0555NAME IS NULL
垢版 |
2020/02/12(水) 21:23:59.53ID:???
業務なら普通に使うぞ
0556NAME IS NULL
垢版 |
2020/02/12(水) 22:35:55.16ID:???
DB設計の経験が浅いプログラマーは
マスターとトランザクションデータの区別がまともにできないから気をつけろ

30オーバーのやつも含めてチーム全員が
マスターのことをトランザクションと呼んでて震撼したことがある
0557質問者
垢版 |
2020/02/12(水) 23:42:53.31ID:lI+lS+0+
>>552
なるほどマスタとトランザクションという概念があるんですか、ためになるな
最新のデータはマスターに記録して変更履歴をトランザクションとして記録すればいいんすね
0558NAME IS NULL
垢版 |
2020/02/13(木) 00:02:14.97ID:???
いや、そういうことじゃなくて
もっと基本的な所から勉強した方が良い
話を聞いている限り、テーブル設計がちゃんとできていない
0559NAME IS NULL
垢版 |
2020/02/13(木) 00:03:42.63ID:???
マスターの履歴とマスターにに対する変更イベントを記録(トランザクション)は微妙に違う
0560質問者
垢版 |
2020/02/13(木) 00:17:07.26ID:IbwPir4s
>>558
テーブル設計でいい本とかサイトありますか?
今、達人に学ぶDB設計指南って本読んでるんですけどフワッとしてるっていうかもっとテーブル設計の実例が見たい
0561NAME IS NULL
垢版 |
2020/02/13(木) 17:28:06.14ID:dDuhYxxE
>>557
コボラーのおじいちゃんの概念なw騙されんなw現代においてはなんも意味ないでw
0562NAME IS NULL
垢版 |
2020/02/13(木) 21:03:05.33ID:???
ついてこれないなら黙ってて
0563NAME IS NULL
垢版 |
2020/02/13(木) 21:16:52.08ID:???
>>560
「業務別データベース設計のためのデータモデリング入門」渡辺幸三
0564NAME IS NULL
垢版 |
2020/02/14(金) 00:46:37.23ID:+QGsVRcr
>>563
ありがとうございます
レビュー見ると難しそうだけど読んでみます
0565NAME IS NULL
垢版 |
2020/02/14(金) 00:52:53.18ID:???
分からない事があれば、ここで聞くといいよ
賑わいはないけど真面目にレスが返る板だから
0566NAME IS NULL
垢版 |
2020/02/19(水) 21:02:42.95ID:dncf6ZkK
>>565
おまえが気持ち悪い事ゆうから誰も居らんくなったやないか
0567NAME IS NULL
垢版 |
2020/02/19(水) 22:45:15.97ID:???
褒めないでくださいよ、照れるな
0568NAME IS NULL
垢版 |
2020/02/20(木) 02:03:55.39ID:7o2dB+yg
連番管理する必要がある場合、以下のどちらのほうほうがよいでしょうか?
https://ideone.com/oOlh4z

中間にINSERTされる場合があります。
SELECTする時は漏れなく連番の先頭から最後まで一括で取得することになります。
0569NAME IS NULL
垢版 |
2020/02/20(木) 03:27:31.79ID:???
前後の関係を知りたいのが主なら1だけど、汎用的には2
0570NAME IS NULL
垢版 |
2020/02/20(木) 04:23:11.02ID:???
>>568
件数や更新頻度、データの使われ方による

一括SELECT時のパフォーマンスが重要なら連番順のインデックスを作れるようにする
例えば有理数で管理して1/5, 2/5, 3/5と並んでるところに
データを挿入したければ3/10, 5/10
それで2/10, 3/10, 4/10, 5/10, 6/10の並びになる
他には101000, 102000, 103000のような飛び番で管理して
番号が埋まってきたら番号を振り直す方法もある

挿入時のパフォーマンスが重要なら書いてるようなLinked List的な方法で良いと思う
previousを知る必要がなければ2の方法で十分だがrootが一発でわかるデータは必要
0571NAME IS NULL
垢版 |
2020/02/20(木) 18:03:03.56ID:???
INSERTする頻度がそれほどでないなら
順番を決められるような非整数の項目用意して
通常は整数値を入れておき、
挿入時に前後の項目の中間値を入れるなんてどうかな
0572NAME IS NULL
垢版 |
2020/02/20(木) 19:50:02.82ID:???
>SELECTする時は漏れなく連番の先頭から最後まで一括で取得
取得する順番はどうでもいいのか?
0573NAME IS NULL
垢版 |
2020/02/20(木) 20:55:47.42ID:???
どう考えても2だろ1とかいみふ
>>570
振り直しとかw
0574NAME IS NULL
垢版 |
2020/02/20(木) 21:26:21.35ID:???
>>572
再帰クエリを使う前提やろ

>>573
>振り直しとかw
RDBのページ分割と同じだぞ
0575NAME IS NULL
垢版 |
2020/02/20(木) 21:53:23.57ID:???
用途によるわな。
二項関係を全部保持する設計だと参照は爆速。
0576NAME IS NULL
垢版 |
2020/02/20(木) 22:07:16.22ID:???
あとnullはやめて-1や0にしといたほうが吉
0577NAME IS NULL
垢版 |
2020/02/21(金) 05:29:35.02ID:???
>>568
入れ子集合
閉包テーブル
なんて方法もあります
0578NAME IS NULL
垢版 |
2020/02/21(金) 20:03:46.42ID:???
>>573
振り直しは実は結構現実的なソリューション

>>574
まあ、再帰前提になるわな

再帰クエリってパフォーマンスどうなんだ
あと再帰のネスト深さとかけっこう制限あったような
0579NAME IS NULL
垢版 |
2020/04/28(火) 18:41:13.11ID:???
フラグ系のカラム名付け質問

例えば商品マスタ(ID,JANコード、名称、・・・)があって
こいつらにセール対象、まとめ買い対象、みたいなフラグカラム追加したいときってどういうカラム名がいいんでしょ?

セール対象テーブル追加してそっちみろは無しでお願いします
is_Bargain、is_MatomeGay(英語わからんので適当)とかにする?
0580NAME IS NULL
垢版 |
2020/04/28(火) 21:37:21.40ID:???
まとめゲイw

命名規約次第だけど個人的にはon_saleやfor_bulkみたいな名前をつける
is/has縛りなら商品に対応する単語をくっつけたほうがいいかも
セール対象商品 => is_bargain_item
まとめ買い対象商品 => is_matomegai_item

item.is_bargainだと英語的には超微妙
item.is_for_bargainならわりと自然だけどis_for_bargainというカラム名は微妙
item.is_bargain_itemも冗長だけど冠詞がないだけでまあ自然でis_for_bargainに比べるとカラム名としてはマシ
0581NAME IS NULL
垢版 |
2020/04/28(火) 21:42:09.42ID:???
ただ現実問題としてis_bargainみたいなboolフラグで管理可能なの?

アフィサイトみたいに表示管理だけでいいなら
それでも問題ないかもしれないけど、実際にキャンペーンやる会社なら
どの期間、どのキャンペーンの対象で、どういう適用条件かみたいなのが最低限必要だからboolじゃ破綻しそう
0582NAME IS NULL
垢版 |
2020/04/28(火) 23:30:35.91ID:???
ありがとうございます
そうなんですよね。英語的にはマシかもだけどカラム名として何だか微妙になるんですよね
現状はフラグ1、フラグ2、..みたいな暗黒状態かつ命名規約何それなので、それよりはマシなのですが

実際は簡単なフラグ管理だけで良いので、バーゲン期間とかは考慮しなくて大丈夫です
良かろうと思って一般的なサンプルでっち上げると余計な検討点が出てきてダメですね

私の悩みを10年前に通過している列海王的な方がいたら、引き続きナイスな命名案をよろしくお願いします
0583NAME IS NULL
垢版 |
2020/04/29(水) 00:45:02.07ID:???
github検索してみたが
on_saleやis_on_saleで命名してるのはそこそこ見つかる
0584NAME IS NULL
垢版 |
2020/05/02(土) 23:39:27.57ID:???
>>583
遅くなりました。ありがとうございます
githubも見てみます
こういう時ネイティブ並の語彙力がほしくなる
0585NAME IS NULL
垢版 |
2020/05/03(日) 04:57:59.36ID:???
どうせそれを見るのも日本人だろ
ネイティブが違和感を感じるかどうかより、日本人が納得するかどうかだと思うぞ

DBMSにもよるだろうが、日本語環境以外での動作を考えないなら日本語カラム名でもいいと思う
0586NAME IS NULL
垢版 |
2020/05/04(月) 17:11:14.86ID:???
以前はfoo_flag, bar_flagみたいな命名はダサいから可能な限り避けようとしてたが
最近は一貫性が取れてるならis_fooやis_barよりもベターなケースが多いと思うようになってきた
組織の英語力やDBリテラシー次第
0587NAME IS NULL
垢版 |
2020/05/04(月) 22:00:17.67ID:???
うちのアカンDB
boo(0,1)とるカラムがxx_kbn
int(0~9)とるカラムがxx_flag
せめて逆じゃね?
0588NAME IS NULL
垢版 |
2020/05/04(月) 23:04:59.53ID:???
逆ならよかったね〜
0589NAME IS NULL
垢版 |
2020/05/10(日) 15:13:42.60ID:DCNb3jN3
普通はデータベースって蓄積するもので、
普通は削除フラグにとどめて、よほどのことがないとdeleteするようなことってないと思いますが、
deleteしまくることによって何か問題が起きたりするのでしょうか?
あと消したあとも、ゴミ箱にいれたHDDの中身みたいに実は復旧可能だったりしますか?
問い合わせのログみたいなのを一定期間後に完全削除するのを考えてます。
0590NAME IS NULL
垢版 |
2020/05/10(日) 15:37:54.86ID:???
>>589
削除するかどうかは要件次第

不要になったら一旦アーカイブに移動させて
その後、事前に決めた一定期間を過ぎたらメディアにバックアップとって削除する
メディアも事前に決めたメディア用の一定期間を過ぎたら廃棄する
そういうデータライフサイクルを要件定義時に決めて運用にのせるのが普通

復元できるかどうかはバックアップやトランザクションログの残し方による
0591NAME IS NULL
垢版 |
2020/05/19(火) 13:31:17.65ID:FzKBKTy1
同じ設計で別の用途に使用したいテーブルがある場合、テーブル名をどうしていますか?

例えばブログの場合、
article   → 記事テーブル
category → カテゴリーテーブル
article_cateogry →記事のカテゴリーテーブル

と設計することがあると思います。
ここに「特集」という別のコンテンツを追加したい場合、

special   → 特集テーブル
special_category → 特集カテゴリーテーブル
special_special__cateogry →特集の特集カテゴリーテーブル

とするのは変です。

記事と特集はテーブル設計が異なるので、同じテーブルでまとめられません。
しかし、「カテゴリー」テーブルの設計は同じです。同名でも意味は通じます。

categoryではなく、type(種類)とかclass(クラス)とか別名にして対応するのでしょうか?
0592NAME IS NULL
垢版 |
2020/05/19(火) 15:41:38.69ID:???
>>591
「特集」は特集記事であって記事の特化したものではないの?

ある一つのカテゴリーを選択した場合に
それに合致する記事も特集も拾いたいケースがあるなら
カテゴリーテーブルは一つにしたほうがよくて
特集テーブルも記事テーブルと1 ― 0..1 の関係で作るか
特集テーブルと記事テーブルを汎化したテーブルを検討する
0593NAME IS NULL
垢版 |
2020/05/19(火) 16:47:06.21ID:FzKBKTy1
>>592
「特集」という例がわかりづらいなら、掲示板(bbs)でもいいです。
掲示板でも「カテゴリー」って分類は必要ですよね?
でも、記事のカテゴリーと掲示板のカテゴリーは内容そのものが違います。

たとえカラムが同じであっても、用途が異なるテーブルを共有し使うのはよくありません。
だからcategoryではない別名が必要なのですが、その命名が難しいという相談です。
0594NAME IS NULL
垢版 |
2020/05/19(火) 20:13:30.72ID:???
この程度のことを聞ける人が会社にいないんだろうかw
0595NAME IS NULL
垢版 |
2020/05/19(火) 20:32:01.95ID:???
記事カテゴリーと掲示板カテゴリーでなんの不都合がある?
0596NAME IS NULL
垢版 |
2020/05/19(火) 20:45:57.38ID:???
>>594
この程度のことがググっても見つからないんです。

>>595
日本語だとそれでOKなのですが、>>591の命名に合わせるとおかしいと思う次第です。

そもそもですが、最初は単純に「category」というテーブル名にしてて、
あとから別の用途のカテゴリーがでてくる事ってありませんか?
最初から記事カテゴリーを作る想定をしていないと思うんです。
規模を拡張する時に命名が被る、だから困るってそんなおかしい悩みですかね・・・
0597NAME IS NULL
垢版 |
2020/05/19(火) 21:13:48.53ID:???
命名がうまくいかないケースの7~8割は
モデリングがうまくできてないケース
0598NAME IS NULL
垢版 |
2020/05/19(火) 21:52:13.20ID:???
悩みは理解できるがmany-to-manyで管理が必要なカテゴリーテーブルが
1つのスキーマに複数必要になるケースってそうそうないよね
0599NAME IS NULL
垢版 |
2020/05/19(火) 21:58:57.66ID:???
そもそもそんな場合はDB分けるし
0600NAME IS NULL
垢版 |
2020/05/19(火) 22:14:36.92ID:???
>>591
そもそも special_category という名称が意味不明
0601NAME IS NULL
垢版 |
2020/05/19(火) 23:39:26.48ID:???
>>598
確かにただアプリとしてブログとか掲示板を作ってるだけなら無いですが、
サイト作ってる場合、要件の追加・カスタマイズってあると思うんですよね
カテゴリーみたいな分類が必要なコンテンツって、
記事、掲示板、お知らせ、特集、クチコミ、求人など様々思いつきますし。
それをWordpressのように単一参照テーブルで管理しろってのもちょっと・・。

>>599
それも考えたのですが、ひとつのDBに数テーブルしかない状態でわけるってのも
どうかと思うんです。JOINの効率も悪そうだし。

>>600
すみません。単に例題として出しただけです。
0602NAME IS NULL
垢版 |
2020/05/19(火) 23:45:42.87ID:???
とにかく的確な答えがない=よくある設計の悩みじゃないってことですかね
categoryじゃなくても、menuとかclassとかgenreとか似たような用途に使える
名前があるし、わざわざカテゴリーって呼び方にこだわらなくてもいいかもしれません

一般的な質問でない場合、上記のように解釈して妥協します。
0603NAME IS NULL
垢版 |
2020/05/20(水) 02:26:52.88ID:???
力技で命名するより先に設計見直したほうがいいって言われてるのが理解できないのかな

記事カテゴリー
掲示板カテゴリー
お知らせカテゴリー
特集カテゴリー
クチコミカテゴリー
求人カテゴリー

普通のお客さんならキレるよ
0604NAME IS NULL
垢版 |
2020/05/20(水) 09:07:47.41ID:???
>>603
お客さんに提供してないのでキレられることはないですが、
設計を見直すということは、既存のテーブルの名前を変えろということですか?

何度も記載していますが、最初はただの「カテゴリー」として作っていたものを
後から「記事カテゴリー」と別名にするのはリスク高いと思います。
だから力技で命名するしかないのではないか?と思う次第です。

「いや、後から用途が増えるなら変えるべきだろ」
というなら私の認識が間違っているので変更しますが、
確信的なレスがないので納得できないでいます。
0605NAME IS NULL
垢版 |
2020/05/20(水) 09:15:02.49ID:???
自分の説明の仕方が悪いと思うので、もう一度整理します。

(1)初期運用段階
article   → 記事テーブル
category → カテゴリーテーブル
article_cateogry →記事のカテゴリーテーブル

(2)「カテゴリー付きの掲示板が必要」という要件が発生した
bbs  → 掲示板テーブル
bbs_category → 掲示板カテゴリーテーブル
bbs_bbs__cateogry →掲示板の掲示板カテゴリーテーブル

[悩み]こういうテーブル設計を追加するのはおかしいと思う。
    一般的にはどうするべきですか?

(補足)>>603さんの案:既存のテーブル名を変更
article_category → 記事カテゴリーテーブルに変更
article_article_cateogry →記事の記事カテゴリーテーブル

[悩み]途中で既存のテーブル名を変更するのはリスクが高くないか
0606NAME IS NULL
垢版 |
2020/05/20(水) 12:39:47.56ID:???
いやいやw
>>603のは普通は全部一つのカテゴリーテーブルでまとめられるだとって話なんだけど・・・

CMSで管理するサイトコンテンツのカテゴリーでしょ?
記事に付けるタグと求人に付けるタグが共通でも問題ないし
どちらか一方にしか使えないタグが必要でも
いちいち別テーブルにしなくてもまとめて管理できるでしょ

力技の命名ってのは関連テーブルを示すprefix/infix/suffixを決めて
それを該当スキーマ内で一貫して使うみたいな規約で逃げるという意味
既存のテーブル名を変更するのがリスクが高いかどうかはアプリの作り次第だが
CMSならリスクは知れてる
0607NAME IS NULL
垢版 |
2020/05/20(水) 17:44:51.41ID:???
>>606
もしかしてCMS=既存のCMSを指してますか?
そうでなくて、自作の話なのですが・・。

それにひとつのカテゴリーテーブルで、>>603みたいなのをまとめるのは無理です。

例えば以下のようなカテゴリーが必要だとします。
記事  |全般、Web制作、システム開発、データベス
掲示板|パソコン、ニュース、エンタメ
お知らせ|サービス、イベント、運営会社

記事コンテンツで、掲示板で使用する「パソコン」というカテゴリーはいらないし、
お知らせコンテンツにある、運営会社というカテゴリーもおかしいです。

カテゴリーテーブル(category)を以下のカラム構成にして
id(pk)|target|name|
1   |article|全般
2   |bbs |パソコン

SELECT * FROM category WHERE target='article'

というSQLを実行すれば、「記事だけのカテゴリーを抽出」することは可能です。
しかし、こんな設計は明らかにアンチパターンですよね?
JOINするときはWHEREとセットになるし、SQLコストも増大します。
通常は要件に伴ったテーブルを用意するはずです。

それともアンチパターンとか関係なく、上記のようにするのが普通なのでしょうか?
あるいは、カラム設計自体も違うというのであれば、正しい設計を教えていただきたいです。
0608NAME IS NULL
垢版 |
2020/05/20(水) 18:55:01.20ID:???
>>607
細かいところを置いておくとそのテーブルイメージの考え方はアンチパターンではないよ
同じ情報を管理するのに全部別テーブルにするほうがアンチパターン

JOINするときWHEREとセットになるんじゃなく
記事/掲示板/お知らせみたいな要素を指すIDが結合条件になる
仮にWHEREで指定することになったところで
カテゴリーテーブルの件数なんてめちゃくちゃ少ないし
きちんとインデックス付けてればSQLコストが増大とかしないから
0609NAME IS NULL
垢版 |
2020/05/20(水) 18:57:14.65ID:???
はじめからそういう要件を想定できなかった以上、きれいな設計にしたいなら作り直せ
0610NAME IS NULL
垢版 |
2020/05/20(水) 19:00:20.45ID:???
>>607
それとそのカテゴリーの例を見ると
1つの記事や掲示板は1つのカテゴリーにしか属さない風にも見えるけど
複数カテゴリーに属する前提であってる?
0611NAME IS NULL
垢版 |
2020/05/20(水) 19:04:47.61ID:???
この態度で回答するやついたら神だな
俺は絶対スルー案件だわw
0612NAME IS NULL
垢版 |
2020/05/20(水) 19:28:50.40ID:???
>>607
上でもそうだったけど、命名がおかしい気がする

掲示板のところにある「パソコン」「ニュース」「エンタメ」というのは
5ちゃんねるで言う板のこと? (たとえばこのスレはデータベース板だけど)

記事・掲示板・お知らせの関係がわかると答えやすくなると思う
(例えば掲示板と記事は一対多の関係など)
0613NAME IS NULL
垢版 |
2020/05/20(水) 19:48:43.41ID:???
なにがどうアンチパターンなのかも判断できないのに
こいつのアンチパターンだからダメって脅迫概念はどっからきてるんだ
0614NAME IS NULL
垢版 |
2020/05/20(水) 20:15:27.77ID:???
>>607
> 正しい設計を教えていただきたいです。
そもそも絶対的に正しい設計なんてない
例えばカテゴリーテーブルを>>603の各項目毎に作るのか1つにまとめるのかも双方にメリット・デメリットあるからケースバイケースで常にどっちかが良いというわけじゃない
算数の答えみたいに正解が1つと思うのはやめた方がいい
0615NAME IS NULL
垢版 |
2020/05/20(水) 20:25:38.47ID:???
レス前後しますが、

>>613
何がどうアンチパターンか=正規化ができてない
って判断はおかしいですかね?怒られる程なのでしょうか・・・

>>608
既存テーブルのカテゴリーを使用する箇所すべてで、SQLを組み直すんですよ?
単純にリスクが増大すると思うんですよね。手間云々だけじゃなくて。

>>609
煽り抜きで教えてほしいのですが、
普通に「思ったより反響があって増築の必要が出た」
って要件、くさるほどあると思うんです。
1か100かじゃなくて、1・2・3って成長していくものだと思うんです。
0616NAME IS NULL
垢版 |
2020/05/20(水) 20:26:36.28ID:???
>>610
591や605の例で中間テーブルを想定していますが、
>>607の例でも中間テーブルを用意すれば、多対多は可能だと思います。

>>611
真摯に議論したいし、間違っていたら教えてもらいたいだけです。

>>614
おしゃるとおりですが、そもそも私の質問自体「こいつ馬鹿じゃね?」
って感じのレスを頂くものですから、ベストプラクティスがあると思うんです。
それにみなさんはどうしているのかを聞きたいのが、希望ですし・・。
0617NAME IS NULL
垢版 |
2020/05/20(水) 21:04:01.67ID:???
>>616
>中間テーブルを用意すれば、多対多は可能だと思います。

実現可能かどうかじゃなく要件として多対多が要求されてるの?
0618NAME IS NULL
垢版 |
2020/05/20(水) 21:17:12.37ID:???
>>615
>既存テーブルのカテゴリーを使用する箇所すべてで、SQLを組み直すんですよ?
>単純にリスクが増大すると思うんですよね。手間云々だけじゃなくて。

自分のまずい設計を正当化するためにリスクが増大するんですって言ってるんじゃなく
微妙な設計になることのデメリットと既存の部分を触ることによるデメリットを
天秤に掛けた上の判断なら別にいいと思うよ

CMSでカテゴリーテーブルを使用する箇所が
あっちこっちに散在してるようならそもそもの設計がまずいとは思うけどね
0619NAME IS NULL
垢版 |
2020/05/20(水) 21:26:58.14ID:???
>>617
要求されています。

>>618
618さんの解釈では、
「すでにカテゴリーテーブルが有るのに同じようなものを用意する必要はない」
ということですよね?それがまずい設計だと、

私は「ひとつのテーブルですべてのカテゴリーを管理する」
ことがまずい設計だと思っているんです。

なぜまずいと思うかというと、アンチパターンだったり、正規化できていなかったりと
一般的に悪いと言われるテーブル設計を採用しろと言われているからです。

618さんの言う「カテゴリーはカテゴリーなんだから、複数あるのはおかしい」
という主張は理解できます。
しかし、ひとつのテーブルに用途違いのデータが入ることの正当性が
私には理解できないので、618さんの主張が正しいと思えないんです。
煽っているのではなく、主張を正しいとする論拠がわからないんです。
0620NAME IS NULL
垢版 |
2020/05/20(水) 21:32:41.33ID:qpD3w8BM
意識低い系の自分はその場合カテゴリのテーブルは一つのままカテゴリの種類ごとにidの範囲を変えて運用してしまうな
記事カテゴリは10000〜19999、特集カテゴリは20000〜29999みたいな
0622NAME IS NULL
垢版 |
2020/05/20(水) 21:49:45.25ID:???
>>620
それで記事テーブルと結合する時はどうするんですか?
全てのSQLにWHERE id BETWEEN '10000' AND '19999'
を追加するのでしょうか?

>>621
5ちゃんねるでいうと板になるんですかね。
記事とか掲示板とかお知らせは1つのテーブル(1つのコンテンツが入る)であり、
カテゴリーというのは、そのテーブル内のデータを分類するために必要です。
1つの投稿に対して複数のカテゴリーを割り当てられることから、多対多ですね。
5ちゃんねるの場合、1つの投稿に複数カテゴリーを割り当てないと思いますが。
0624NAME IS NULL
垢版 |
2020/05/20(水) 22:25:53.64ID:???
>>619
>「すでにカテゴリーテーブルが有るのに同じようなものを用意する必要はない」ということですよね?
違う、そういう考え方じゃない
既存のしがらみは一旦忘れて同じエンティティなのか異なるエンティティなのかを考える
その答えは要件によって変わるんだが
今のところ異なるエンティティとして管理すべき要件は見当たらない

正規化できないというのは君の思い込み

コンテンツの種別ごとにカテゴリーテーブルとその中間テーブルを作らなきゃいけないのは
SQLアンチパターンの9章にある”Antipattern: Clone Tables or Columns”
0625NAME IS NULL
垢版 |
2020/05/20(水) 22:39:11.58ID:???
CMSならコンテンツを管理する単位が記事だろうと掲示板だろうと
共通に扱える仕組みを用意した上で個別に必要な拡張が施せるようにする

記事に特化した記事管理システムなら
そこに掲示板管理システムをそのまま増設するのは悪手で
DB含めてシステムを分けるか再構築してまともなCMSにする
0626NAME IS NULL
垢版 |
2020/05/20(水) 23:15:00.78ID:???
>>624-625
自分のスキルが低いと思うんですが、理解できずに申し訳ないです。

それでは私が最初に構想していた>>591という
要件毎にテーブルを作るやり方ではなく、
>>607のような、ひとつのテーブルでまとめるやり方が正しい
(今回の相談ケースではこうするべき)という解釈で良いのでしょうか?

AでもBでも良いとか、AもBもよくないという結論では
モヤッとしてしまうので、どちらがベターか指摘してほしいです。
0627NAME IS NULL
垢版 |
2020/05/20(水) 23:35:03.93ID:???
>>616
> ベストプラクティスがあると思うんです。
だからケースバイケースだっていう話

>>611
お前が正しかったわ
0628NAME IS NULL
垢版 |
2020/05/20(水) 23:41:09.52ID:???
突然伸びててビビったズラ

テレワークは終わりですよ
0629NAME IS NULL
垢版 |
2020/05/21(木) 01:00:34.53ID:???
お前の言うカテゴリーとは何なのかを詳細に詰めないとベストな答えなんか出ないわ

テーブル名とかまあどうでもいいわな
掲示板カテゴリーと記事カテゴリーが別だとするなら別テーブル作ればいいし
同じだが使用箇所が違うだけだと思えば一つで良い
0630NAME IS NULL
垢版 |
2020/05/21(木) 06:52:31.63ID:???
命名規約があるなら結果変なテーブル名になっても仕方ない
それがいやならテーブル名を連番にでもすればいい
0631NAME IS NULL
垢版 |
2020/05/21(木) 11:31:44.45ID:???
>要件毎にテーブルを作るやり方ではなく

要件という言葉を理解してないw
無知なのにイキってる感じがQiitaっぽいな
0632NAME IS NULL
垢版 |
2020/05/21(木) 17:40:13.28ID:???
カテゴリと内容の関係ならカテゴリに記事と特集を示すフィールド入れれば解決ずら
その程度の変更もできないプログラムだったらプログラム側の設計も見直したほうがいいら
0633NAME IS NULL
垢版 |
2020/05/21(木) 18:10:57.18ID:???
話題変わるけど10万円給付のオンライン申請で多重申請とかで問題出て停止しているようだけど
これってDB設計が糞だと思うんだけどどうだと思いますか?
0634NAME IS NULL
垢版 |
2020/05/21(木) 18:20:21.15ID:???
システム設計の根本から間違えている
0635NAME IS NULL
垢版 |
2020/05/21(木) 18:57:20.13ID:???
多重申請を許容するかどうかは要件次第なので
多重申請ができるからといってDB設計が糞とは言い切れない

DV被害者対策や郵送申請もあるので
後続の業務はもともと多重申請がある前提で設計しておく必要がある

実際のところは短期間での開発を要求されたから
普通なら必要になる画面や機能を削った結果
多重申請を許容する仕様にせざるを得なかったんだろうな
0636NAME IS NULL
垢版 |
2020/05/21(木) 19:02:38.66ID:???
ググったら10人以上の世帯は複数回申請しないといけないからってのと
間違った内容で申請した場合に後から正しい内容で申請できるようにするために
多重申請ができる仕様にしてるらしい

付け焼き刃だし仕方ないかもね
郵送に一本化しといたほうが効率的だった可能性もある
0637NAME IS NULL
垢版 |
2020/05/21(木) 19:29:00.39ID:???
今回の目的はギョウムカイゼンじゃなくて感染防止だから……

単に用紙の持ち込みをオンライン化しただけで
持ち込まれたデータのチェック・管理はすべて人力
分かりやすいシンプルな良いシステム
0638NAME IS NULL
垢版 |
2020/05/21(木) 19:49:25.34ID:???
>新型コロナウイルスの感染拡大に伴う現金10万円の一律給付を受けるためのオンライン申請について、
>東京 調布市と福生市は入力された情報の確認に時間がかかり給付が遅れるおそれがあるとして、受け
>付けや手続きを停止しました。オンライン申請を巡っては、同じような対応をとる自治体が各地で相次い
>でいます。

https://www3.nhk.or.jp/news/html/20200521/k10012439151000.html
0639NAME IS NULL
垢版 |
2020/05/21(木) 21:19:53.32ID:C+Ki3nmV
オンラインで申請すると郵送よりも処理に時間がかかる上、
郵送分の処理も妨害して遅くするのでやめてほしいそうだ。
0640NAME IS NULL
垢版 |
2020/05/22(金) 15:56:07.78ID:???
>>607
自分が俄で視点が近いからか微妙に解る気がするんだけどこの設計がEAVじゃないかって気になるって事であってる?

けどこれって>624の「同じエンティティなのか異なるエンティティなのかを考える」が全てで、
カテゴリーっていう同じエンティティなんだから同じテーブルに纏めたってEAVにはならないのではって事だと思うが

このテーブルに[targer:person_name, name:田中]みたいなレコード登録したらEAVだと思うけど
0641NAME IS NULL
垢版 |
2020/05/22(金) 23:25:58.05ID:???
EAVかどうかなんて考え方次第
カテゴリーテーブルがサブカテゴリーにたいするEAVだって考え方もある

EAVだからアンチパターンでダメだって考えが間違ってる
アンチパターンと言われているものの、何がどうダメなのかちゃんと考えないと
0642NAME IS NULL
垢版 |
2020/05/23(土) 00:18:19.59ID:???
AmazonみたいなECサイトで商品カテゴリと顧客カテゴリを管理するとしたらほぼ確実に別エンティティ

Youtubeの動画に付けるタグとGmailのメールにつけるタグも1テーブルで管理することはまずない
(RDB使ってない可能性のほうが高いけど)

QiitaがもしQ&A掲示板を始めたり技術イベントの告知・集客サービスを始めて
各スレッドや各イベントにタグ付けできる機能を実装するようなケースは
既存の記事向けのタグと同じエンティティとして管理する可能性が高い
0643NAME IS NULL
垢版 |
2020/05/23(土) 09:51:07.58ID:???
あきらかに回答でもなく雑談(笑)
0644NAME IS NULL
垢版 |
2020/05/23(土) 11:30:26.74ID:???
雑談と言うより単なる妄想
0645NAME IS NULL
垢版 |
2020/05/23(土) 12:34:48.23ID:???
雑談っちゃ雑談だけど抽象化思考が苦手なやつが多いみたいだから具体的なインスタンスを示してみたんだよ

ケースバイケースとか考え方次第で済ませてその判断基準を何も提示しないのはゼロ回答に等しいからさ
0646NAME IS NULL
垢版 |
2020/05/23(土) 12:59:28.25ID:???
ここは、モノローグスレ
0647NAME IS NULL
垢版 |
2020/05/23(土) 14:37:43.95ID:???
適当な妄想垂れ流すぐらいならゼロ回答のほうがマシ
0648NAME IS NULL
垢版 |
2020/05/23(土) 16:07:15.63ID:???
事例に対する個人の判断結果を示してるだけで、肝心の判断基準を示してない件
0650NAME IS NULL
垢版 |
2020/05/23(土) 20:48:19.09ID:???
でも語るスレだからいいのか
0652NAME IS NULL
垢版 |
2020/05/27(水) 07:37:48.25ID:???
質問です
csv ファイルを提供されて
数量データが4000なのですが
少数第二位までという4000.00の意味の
400000というデータで提供されます
毎回エクセルで100で割ってからインポートします
また、顧客コードが10桁で
数字の羅列が醜いので
12-3456-7890とハイフンの追加も行ってから
インポートします
毎月の事なのですが
この数量データ割算と、顧客データハイフンを
いちいちExcelで処理せずに
インポート時やインポート後にうまく処理する方法は無いでしょうか?
0653NAME IS NULL
垢版 |
2020/05/27(水) 10:55:44.11ID:???
>>652
若干スレチな気もするがその内容ならCSVを変換するスクリプトを書くのが手っ取り早いと思う

どういう方法が最適かはDBMSの種類、既存のインポート方法・インポート時の処理内容、処理件数、所持スキル等による
0654NAME IS NULL
垢版 |
2020/05/27(水) 11:30:33.69ID:???
ここまで回答見てきたけど、結局ケースバイケースで終わる話ばかりだな
0655NAME IS NULL
垢版 |
2020/05/27(水) 12:01:00.97ID:???
経験浅いとケースバイケースが理解できないから仕方ない
0656NAME IS NULL
垢版 |
2020/05/27(水) 12:29:36.22ID:???
そのケースバイケースを細かく教えて
今ここで話題にしているのはその事例なんだから
0657NAME IS NULL
垢版 |
2020/05/27(水) 13:37:12.83ID:???
>>656
>そのケースバイケースを細かく教えて

これがケースバイケースが理解できてない典型例
0658NAME IS NULL
垢版 |
2020/05/27(水) 13:55:21.55ID:???
理解出来るように説明して
0659NAME IS NULL
垢版 |
2020/05/27(水) 14:36:27.12ID:???
>>652
この質問だけだと良くわからないんだよね
csvファイルはどういうDBにインポートされるのかとか
そもそもなぜ100で割ってからインポートするような謎な仕様になっているのかとか

ひとまずこの質問文だと, DB設計の話ではなく, DBを扱うプログラミングの話でしかない
DBにアクセスするプログラミング言語で実装すればよい
0660NAME IS NULL
垢版 |
2020/05/27(水) 14:47:02.83ID:???
>>658
何を知りたいのかを他人が理解出来るようにまず説明して
0661NAME IS NULL
垢版 |
2020/05/27(水) 14:55:35.18ID:???
「ケースバイケースで終わる話」って説明が必要なの?
0663NAME IS NULL
垢版 |
2020/05/27(水) 15:23:40.95ID:???
客観的に見て「それケースバイケースだよね」ってレスするより
「これはこうしろ」ってレスするほうが早くないか?
質問者に喜ばれるし、自己顕示欲も満たすし、スレも荒れない。
何も損しないんだが、なぜケースバイケースってまとめるのかわからん
0664NAME IS NULL
垢版 |
2020/05/27(水) 16:56:45.60ID:???
>>663
早くない
質問する側がどういうケースなのかを特定するための説明をするほうが断然早い

どういうケースなのかを相手に伝える努力を放棄してるにもかかわらず
答える側にはケースを想定した回答を求めるのは無理筋
0665NAME IS NULL
垢版 |
2020/05/27(水) 17:28:19.42ID:???
何をもって
「それケースバイケース」って言えるか位は、
言えるだろう
それを聞いている
0666NAME IS NULL
垢版 |
2020/05/27(水) 17:28:52.80ID:???
>>664
それならもっと詳しく聞けばいいだけじゃないか?
プログラム板とか情報足りないとそう答えてるぞ

荒れやすいニュース板でもケースバイケースとかどっちでもいいとか
クソレスするやつは少ないよ
ここぐらいだ。端からコミュニケーション放棄してるのは
0667NAME IS NULL
垢版 |
2020/05/27(水) 17:29:08.26ID:???
自分の好きな例を持ってくれば良いという、簡単な事だろう
0668NAME IS NULL
垢版 |
2020/05/27(水) 17:32:01.30ID:???
普通ならそうだよ。
「AまたはBですか?」
という的外れな質問でも
「Cだよ」って回答して
「いや、CじゃなくてAはこういう意味で〜」
ってな感じでスレが流れる。

しかしここは「AでもBでもどっちでもいい」だもん。
まるで会話になっていない
0669NAME IS NULL
垢版 |
2020/05/27(水) 17:39:29.67ID:???
>>665
「それを聞いてる」じゃわからないよ
何を聞いてるの?
0670NAME IS NULL
垢版 |
2020/05/27(水) 18:00:58.87ID:???
>>666
>それならもっと詳しく聞けばいいだけじゃないか?

それは単なる甘え

自分が努力せず他人に努力させようとしてるやつに
仕事でもないのに懇切丁寧に聞き返す労力を払うやつは少ないわな
0672NAME IS NULL
垢版 |
2020/05/27(水) 18:54:02.70ID:???
ここは、AかBかって質問で充分なケース想定ができるならもともな答がかえってくるわ

ケースバイケースっていわれた段階で説明が足りんと気づけや
0673652
垢版 |
2020/05/27(水) 19:08:39.17ID:???
653
659
スレチなのにご回答ありがとうございます
とりあえずデータベースだけで出来るような仕組みを考えます
0674NAME IS NULL
垢版 |
2020/05/27(水) 19:12:38.40ID:???
ちゃんと説明しないやつはコミュニケーションが足らないって言ってるやつが相手してやればいいだろ
内容がはっきりすればそれなりに回答してくれてるだろ、このスレは
0675NAME IS NULL
垢版 |
2020/05/27(水) 19:14:01.98ID:???
常にケースバイケースなら、

ケース分けなどいらないぞ
0676NAME IS NULL
垢版 |
2020/05/27(水) 19:15:19.35ID:???
ちゃんとやりたいことを説明しないからケースバイケースって言われるんだろ
0677NAME IS NULL
垢版 |
2020/05/27(水) 20:16:10.67ID:???
ワークテーブルにいれてから
加工するsqlでインポートはどうかな
0678NAME IS NULL
垢版 |
2020/05/27(水) 20:19:15.84ID:???
まちがえたインサートだ
0679NAME IS NULL
垢版 |
2020/05/27(水) 21:18:28.66ID:???
ETLでやる内容だな
0680NAME IS NULL
垢版 |
2020/05/27(水) 22:01:37.60ID:???
ハイフン入りの顧客コードは計算列という選択肢もある
参照整合性がどうなってんのか気になるが
0681NAME IS NULL
垢版 |
2020/05/27(水) 22:20:41.40ID:???
エクセルだろ
セルに書式設定すればいいんじゃね

インポートして書式設定までVBAですぐできるだろ
0683NAME IS NULL
垢版 |
2020/05/28(木) 12:11:39.95ID:???
>>682
想像してるんじゃなくてDBだけでやりたいという形でケースの特定化がなされたことで>>677>>680の回答が出やすくなってるんやで
0684NAME IS NULL
垢版 |
2020/05/28(木) 12:49:31.13ID:???
>>682
これに関してケースバイケースなんて言われてないだろ
お前はそれ以前に日本語が読めないのか?
0686NAME IS NULL
垢版 |
2020/05/28(木) 17:13:38.87ID:???
カテゴリー君はよほど悔しかったんだなw
0687NAME IS NULL
垢版 |
2020/10/02(金) 04:29:53.32ID:8BLp41VJ
すみません。IDの設定について教えて下さい。
現在、id (INTEGER) と user_name (TEXT) の2カラムで、以下のデータがあるとします。
1 , 東京営業所
2 , 沖縄営業所
3 , 北海道営業所
4 , 東北営業所

データを取得時、以下のように北のほうからの並びで取得したい場合は、並び順を設定するカラムを追加するしかないでしょうか?
3 , 北海道営業所 , 1
4 , 東北営業所 , 2
1 , 東京営業所 , 3
2 , 沖縄営業所 , 4

既存のテーブルで、設計を変更するとプログラム側も変更しないといけない場所が何か所か出てくるので、
極力変更したくないのですが・・・
0688NAME IS NULL
垢版 |
2020/10/02(金) 07:18:02.94ID:???
どうしても変更したくないならソートオーダーの為だけの新テーブルを追加
素直にフィールド追加した方が後の保守は楽ですよ
プログラム側はフィールド追加で影響が出ない様に作るものですけどね
0689NAME IS NULL
垢版 |
2020/10/02(金) 08:33:57.24ID:???
既存テーブルへのカラム追加で既存プログラムも修正が必要になるのって
データを複製してるような処理しか思いつかない
そういう処理なら並び順もデータとして必要になるよね
0691NAME IS NULL
垢版 |
2020/10/02(金) 22:02:47.07ID:???
今どきアスタリスク指定してるくらいじゃ問題にならんよ
最終目的地までカラムを指定せず全部出力するなら別だけど
0692NAME IS NULL
垢版 |
2020/10/02(金) 22:21:30.11ID:???
今order by指定していないなら、それは「たまたま」id順で出てるだけ
どっちにしてもorder by指定する必要がある

今idでorder byしてるが、それを変えたくないなら、id振りなおすしかないわな
id振りなおすのとカラム追加&プログラム変更とid振り直しとどっちが楽か判断して決めれば良いんじゃね
0693NAME IS NULL
垢版 |
2020/10/03(土) 20:16:27.73ID:???
なんで行順番の話?
0694NAME IS NULL
垢版 |
2020/10/03(土) 23:37:33.72ID:???
さあ

しかしorder byがなくて
バクるアプリを引き継いだワイにはタイムリーネタやで
0695NAME IS NULL
垢版 |
2020/10/03(土) 23:46:00.34ID:???
都道府県コード使うとしても、北からの並びではないからなあ
並べたい順に自分で番号付けたテーブルを用意しないと無理でしょ
0697NAME IS NULL
垢版 |
2020/10/05(月) 16:37:36.91ID:???
case でマッピングするという力業もあるけど
0698NAME IS NULL
垢版 |
2020/10/05(月) 19:58:12.35ID:mY4x3iPH
>>687
そのIDにエリアの概念を持たせなかったのが失敗なんだよ。
0699NAME IS NULL
垢版 |
2020/10/05(月) 20:44:41.26ID:???
idにidentity以外の意味を持たせるのは愚策。素直に順序列を追加するのが吉。
0700NAME IS NULL
垢版 |
2020/10/05(月) 20:44:48.17ID:???
あるあるアンチパターンを勧めてくるとは

さすが
0702NAME IS NULL
垢版 |
2020/10/06(火) 01:05:10.04ID:HE4gRaIT
電話番号や郵便番号のコード体系を考えたこともないのかね。
0703NAME IS NULL
垢版 |
2020/10/06(火) 09:23:09.69ID:???
コード体系が必要なら各意味を別々のカラムで管理してコード自体は導出項目にする

コード体系を作ったこともないのかね。
0704NAME IS NULL
垢版 |
2020/10/06(火) 10:17:55.36ID:???
汎用機世代の人やRDBをよく知らないExcel屋さんは
すぐ暗黙のコードを使おうとするんだよね

昔、東大卒のマーケティング屋さんが
10個以上の意味を埋め込んだオレオレ独自コードを
自信満々のドヤ顔で説明してきた時は困り果てたよ
0705NAME IS NULL
垢版 |
2020/10/06(火) 11:04:05.32ID:9/QKAQYT
代理キーが標準のような話になってますね
0706NAME IS NULL
垢版 |
2020/10/06(火) 11:47:26.23ID:???
匿名掲示板で、ID表示なし、コテハンもトリップもナシでどやられてもなあ
0707NAME IS NULL
垢版 |
2020/10/06(火) 11:47:30.72ID:???
コード体系の話はプライマリキーが代理キーかナチュラルキーかは関係ないよ

複数の意味を持たせるのがアンチパターン
0708NAME IS NULL
垢版 |
2020/10/06(火) 13:04:33.85ID:9/QKAQYT
主キーの意味がわかってないのか?
0709NAME IS NULL
垢版 |
2020/10/06(火) 13:25:17.40ID:???
いつもの触っちゃだめなやつ
控えめに言ってガイキチなので気をつけろ
0710NAME IS NULL
垢版 |
2020/10/06(火) 14:07:09.38ID:9/QKAQYT
>>699
identityではなくidentifier。
0711NAME IS NULL
垢版 |
2020/10/06(火) 14:07:39.63ID:9/QKAQYT
>>707
IDはユニークという意味しかない
0712NAME IS NULL
垢版 |
2020/10/06(火) 14:37:54.31ID:???
>>699が言ってるのは「identifierにidentity以外の意味を持たせるのは愚策」ってことやぞ
0713NAME IS NULL
垢版 |
2020/10/06(火) 14:54:07.51ID:???
あるコード(体系)を設計し導出項目となり、それをキーとしたいとなった場合
必然それは代理キーとなるだろう、とは言えるが

導出項目をつねに代理キーにするとか言ってないし
代理キーが主キーに限定されているわけでもないし

そもそもコード体系云々以前に
一つの項目に複数の意味を持たせるなって大原則があるだけ
0714NAME IS NULL
垢版 |
2020/10/06(火) 16:27:35.99ID:9/QKAQYT
実務経験のなさが露呈してますよ
0715NAME IS NULL
垢版 |
2020/10/06(火) 18:02:55.53ID:???
もしかして代理キーをsurrogate keyの意味じゃなくalternate keyの意味で使ってるのか?

もしそうなら誤訳以外のなにものでもないので別の訳語なり用語を選んだほうがいいと思うぞ
0716NAME IS NULL
垢版 |
2020/10/06(火) 18:11:26.80ID:???
https://ja.wikipedia.org/wiki/代理キー
代理キー(だいりキー、英: alternate key)
代替キー (サロゲートキー、surrogate key)

これはやべぇw
英語の日本語の意味が完全に逆
0717NAME IS NULL
垢版 |
2020/10/06(火) 18:14:46.93ID:HE4gRaIT
いまになって調べてるのか?
0718NAME IS NULL
垢版 |
2020/10/06(火) 18:24:08.59ID:HE4gRaIT
>>716
その代替キーはIPAでは代用キーと呼んでいる。

サロゲートキーのことを「代理キー」と呼ぶのは日本の慣習です。

英語の翻訳語は使われ方が反対になることがあるので注意してください。
0719NAME IS NULL
垢版 |
2020/10/06(火) 22:06:20.96ID:???
>>716
wikipediaの記事ができるより前の時期で検索してみたが
surrogate keyは代理キーは、alternate keyは代替キーと正しく訳してるものしか見つからない
オラクル、富士通、ユニシス、@IT、オージス総研などなど

古いDBマガジンを確認しても代理キーはsurrogate keyの意味で使われてるものしかない

歴史修正主義なんかな?
0720NAME IS NULL
垢版 |
2020/10/06(火) 22:15:47.94ID:???
alternate keyは二次識別子と言っておけばだいたいOK
0721NAME IS NULL
垢版 |
2020/10/20(火) 07:31:35.62ID:???
テーブル設計であえて正規化しないで置くべき理由ってなにがあるでしょうか?
ちょろっとググった感じだと、パフォーマンスが重要な要件だとテーブル結合をなるべく避けたい
とかが見つかりましたが
0722NAME IS NULL
垢版 |
2020/10/20(火) 07:34:17.42ID:???
逆に正規化する「べき」理由ってあるの?
0723NAME IS NULL
垢版 |
2020/10/20(火) 07:40:17.35ID:???
素人なので断言できませんがパッと思いつくのは
多重管理を避けることができ、それに付随して
・テーブルの意図が明確になる
・データ不整合の発生を防げる
などです
0724NAME IS NULL
垢版 |
2020/10/20(火) 10:09:11.35ID:???
>>721
トランザクション処理中心の業務系データベースの場合は基本的に正規化する
更新異常を防いで整合性を維持するため

ただしパフォーマンス最適化のために正規化されたものを非正規化することはある
その場合でも設計時には正規化された場合の構造を明確にした上で非正規化する
そうしないと非正規化したことでどういう更新異常が発生しうるのかや
アプリ側で担保しなくてはいけないデータ整合性が明文化されないから

データウェアハウスのようにデータの追加はあっても更新のない情報系データベースの場合は
全く正規化しないわけではないけど最初から分析しやすい形を念頭に設計する
0725NAME IS NULL
垢版 |
2020/10/20(火) 14:09:08.77ID:???
>>724
やはり特殊な用途を除き正規化するのが基本なのですね
ありがとうございます

身近で詳しそうな人に正規化した設計を提出したところ
フラットに作り直すよう指摘され、明確な理由がわからず
もやもやしておりました

開発観点の他に運用・保守観点(項目の追加/削除、データの追跡可能性)
を想像してみても特に正規化を避けるべき理由が思い当たりませんでした
0726NAME IS NULL
垢版 |
2020/10/20(火) 14:56:58.07ID:???
なぜ指摘した本人に理由を聞かないのか

そもそもそれほんとにちゃんとした正規化が出来てるのか?
正規化を避けるべき理由はないのか?

そもそも設計を提出ってなんだよ。業務なのか?
だったらなぜ上司ではなく詳しそうな人なんだ
0727NAME IS NULL
垢版 |
2020/10/20(火) 15:05:03.53ID:???
もしかしてRDBじゃなくMongoみたいの使う前提なのかな?

まあ指摘した本人に理由を聞くべきなのは間違いない
0728NAME IS NULL
垢版 |
2020/10/20(火) 15:31:38.20ID:???
理由ははぐらかされてしまいました
そっちのほうがいい気がする
というようなことを言っていました

> もしかしてRDBじゃなくMongoみたいの使う前提なのかな?
RDBです
0729NAME IS NULL
垢版 |
2020/10/20(火) 16:12:36.27ID:???
技術的な面じゃなくサーバーが年代物で貧弱とか
開発予算がないから手抜きで作るとか政治的な事だったり
0730NAME IS NULL
垢版 |
2020/10/20(火) 17:39:35.83ID:???
正規化した設計とかフラットにした設計の中身が
もう少し具体的にわからんとなんとも言えないね

フラットにすることで更新異常が発生しうるんなら
メリットデメリット理解して選択するしかない
0731NAME IS NULL
垢版 |
2020/10/20(火) 19:58:51.65ID:???
>>725
世の中には自分の理解できないものは使うな
って言う上司とか先輩はいっぱいいる
その人に従わないとダメなら言質を押さえて従うがよろし
単に詳しそうな身近な人と言うだけならもう変更の工数ないからとか言って無視しとけばいい
0732NAME IS NULL
垢版 |
2020/10/21(水) 00:08:11.04ID:???
原則は教科書通りにるすのが一番ですが

場数踏んだ熟練のPGさんとか
製造工数おさえてギリokみたいな
絶妙な作りしてくる人もいる
理由は経験とカンみたいな

気にやまないことだと思います
0733NAME IS NULL
垢版 |
2020/10/21(水) 01:41:41.26ID:???
すぐに言語化できなくても直感的にモヤッとする設計ってのはある
必ずしもその直感が妥当というわけではないんだけど
熟練になればなるほど感覚的なものも大事にしたほうがいい
0734NAME IS NULL
垢版 |
2020/10/21(水) 01:49:04.44ID:???
なんとなく分かる
気持ち悪い設計って確かにある
0735NAME IS NULL
垢版 |
2020/10/21(水) 13:04:54.08ID:???
第4や第5とかボイス何たらとかを第3に戻されたとか?
0736NAME IS NULL
垢版 |
2020/10/21(水) 13:07:36.31ID:???
第5はともかくボイスコッドで設計できる人の質問ではない気がする
0737NAME IS NULL
垢版 |
2020/10/21(水) 17:30:47.48ID:???
詳しそうで素人な人もいるぜ
クソ設計なテーブルで、プログラム書かされて死にそうになったことある
0738NAME IS NULL
垢版 |
2020/10/23(金) 14:20:38.63ID:???
>>736
ボイスコッドの方が難易上なの?
自分が理解し切れてないのだけど、ボイスコッド正規形は条件満たすだけならまあ簡単だけど実務とか現実世界の関係的に違和感のある設計になるよくわからんもの、みたいなイメージがある……
0739NAME IS NULL
垢版 |
2020/10/23(金) 23:40:51.85ID:???
実務のボイスコッド正規形は理論のそれと違って
導出属性を使った制約を追加することで第三正規形から関数従属性を失わずに
ある種のビジネスルールをデータモデルに埋め込むことができる

第3や第5よりもBC正規形使った設計ができる人のほうが
DB設計に対して深い理解があると思うよ
0740NAME IS NULL
垢版 |
2020/11/30(月) 22:31:04.06ID:???
とりあえずサロゲートキー持たせたいとき(持たせるって表現で良いのか解らないけど)って、
数字のみの連番にする? 何か文字列も付与する? ケースバイケース?

数字のみで良いのかなと思ってたんだけど、文字列付けた方が良い時ってあるんじゃろか
0741NAME IS NULL
垢版 |
2020/11/30(月) 23:55:06.66ID:???
サロゲートキーという範疇に入らないかもしれないがUUIDを使ったほうがいいケースは自然と文字列も入る
分散データベース間でも一意に識別したいとかDBにアクセスせずに一意なIDを生成したい場合

でもそういうのはDBのプライマリキーには使わないから
1つのテーブル内の一意性で十分で、数字の連番を使い切る可能性がなければ文字列を入れる理由はないかな

他には人間に読みやすくかつ間違いにくくするために文字を入れるケースもあるけど
その場合は生成した数字とは別のカラムで文字列込みの値を管理する
0742NAME IS NULL
垢版 |
2020/12/01(火) 00:00:33.65ID:???
最初に文字を入れると全部桁数は揃うだろうから見た目は気持ちはいいかもな
0743NAME IS NULL
垢版 |
2020/12/02(水) 02:52:19.08ID:???
>>741
なるほど。こういうのもあるのか
> その場合は生成した数字とは別のカラムで文字列込みの値を管理する

これはこれで、それぞれのカラム名どうしようとか悩みます
文字列込みにした方が人間に読みやすいのは確かなんだけど、2つ管理するのも不慣れなせいかしっくりこない
選択肢が増えてますます混乱したw
0744NAME IS NULL
垢版 |
2020/12/02(水) 09:55:10.43ID:???
そもそも代理キーに文字を入れたいとか、代理キーになんらかの意味を持たせたいってことだろ
それすでに代理キーじゃなくね
0745NAME IS NULL
垢版 |
2020/12/04(金) 10:49:18.51ID:???
>>744
代理キーならあるでしょ
サロゲートキーの話をしてるなら同意するけど
0747NAME IS NULL
垢版 |
2021/01/04(月) 11:20:12.25ID:???
商品に、表示フラグ、新着フラグ、18禁フラグや、表示優先順位などWeb上の表示だけに特化した値を持つ場合、商品マスタに書いてしまっていいのでしょうか?それとも別に持ったほうがいいのでしょうか?
0748NAME IS NULL
垢版 |
2021/01/04(月) 12:28:55.25ID:???
表示フラグと18金wはいるだろうな
他は、コロコロ変わるものだから
別にして良いと思う
0749NAME IS NULL
垢版 |
2021/01/04(月) 18:53:45.42ID:???
>>747
商品マスタの構成や商品マスタをどう使う前提なのかによる

一般論で言えば商品IDが決まれば値が確実に決まるような属性なら商品マスタに書く
商品すべてがWeb上で扱う前提ならWebに特化した値も商品マスタに書いてもいい
Webに特化した属性のCRUDのタイミングが商品マスタの基本属性と異なるなら
別テーブルにしたほうがいい可能性が高い

18禁フラグ以外は商品ID+日時の組み合わせで管理できるようにしておいたほうが運用は楽
(商品マスタ自体が商品ID+日時の組み合わせで一意になるようなら更新頻度/更新タイミングなどから別テーブルにするかどうか検討)

あと新着かどうかは販売開始日付みたいなのからアプリで判断するほうが普通
0750NAME IS NULL
垢版 |
2021/01/04(月) 21:39:09.85ID:???
サロゲートキーにulid 使うのは異端?
スレ検索してもulid 出てこないね。
0751NAME IS NULL
垢版 |
2021/01/04(月) 22:01:16.35ID:???
サロゲートキーにUUIDを必要とするユースケース自体がかなり稀だからね
0752NAME IS NULL
垢版 |
2021/01/04(月) 23:04:35.94ID:???
ごめん、ちゃんと注意して書けば良かった。
128bitのUUID(Universally Unique Identifier)ではなくて、
同じく128bit(Timestamp 48 bit + Randomness 80 bit)のULID(Universally unique Lexicographically sortable IDentifier)。

日時でソートできるUUID的なヤツなんだけど、あんま使われてないんかな?
0753NAME IS NULL
垢版 |
2021/01/04(月) 23:37:36.45ID:???
わかってるよ
UUIDを必要とするユースケース以外でULID使うことないでしょ
0754NAME IS NULL
垢版 |
2021/01/04(月) 23:55:03.99ID:???
仰る通りです。すいませんでした。
0755NAME IS NULL
垢版 |
2021/01/05(火) 00:56:58.70ID:???
それサロゲートキー項目に一意性と日時って二つの意味を持たせることになるんじゃね
ありえないな。日時でソートしたいならちゃんと日時の項目もつべき
0756NAME IS NULL
垢版 |
2021/01/05(火) 01:50:26.16ID:???
生成順にソート可能にするための実装として日時を使っているからといって
日時の意味を持たせてるということにはならないよ

ULIDから日時を取り出してデータ作成日時として利用するなら別だが
0757NAME IS NULL
垢版 |
2021/01/05(火) 15:53:27.55ID:???
日時としての意味はなくても、その日時で生成順としての意味をもたせてるじゃないか

シーケンスとか生成順に使うような場合って実際には結構あるけど、本来それも間違ってる
昔のオラクルのマニュアルとか生成順は保証しないようなこと書いてあったんだがなぁ
0758NAME IS NULL
垢版 |
2021/01/05(火) 17:16:48.59ID:???
大小比較可能な値を生成したら「二つの意味を持たせてるからありえない」ってどういう脳みそしてるんだか

オラクルが正だと思ってるようなやつは中途半端な知識で
斜め上の御託を並べ立てるやつが多くて困る
0759NAME IS NULL
垢版 |
2021/01/05(火) 20:05:33.88ID:???
一意保障以外に大小比較って意味をもたせてるんだから二つの意味なんだが
サロゲートキーに一意保障以外の意味を持たせるなって大原則をまず理解しような
0760NAME IS NULL
垢版 |
2021/01/05(火) 20:08:21.25ID:???
シーケンスのDB発番はクラスタ化が難しいので元々ありえない。

UUIDは日時でソート出来ない。

ULIDはソート出来るだけでありがてぇ。パーティショニングで役に立ちそう。あ、DB発番しないよ。
0761NAME IS NULL
垢版 |
2021/01/05(火) 20:24:27.35ID:???
だったら素直にUUIDと日付列用意すればいいんじゃね
インデックスの効率落ちそうだ
0762NAME IS NULL
垢版 |
2021/01/05(火) 22:59:49.77ID:???
>>759
なんで2つ意味を持たせると良くないのかをまず考えろよ
その理由を理解せずにトンチンカンなことばっかり言ってマウント取ろうとするからいつもバカにされてるんだぞ
0763NAME IS NULL
垢版 |
2021/01/09(土) 14:41:54.56ID:???
上の話どうなった?
自分740の質問した人間なので気になる

きのこたけのこ論争みたいなもんで正解はないやつ?
0764NAME IS NULL
垢版 |
2021/01/09(土) 16:21:49.00ID:???
UUIDの代替としてULID使うべきかどうかはケースバイケースだからその点ついての正解はない
ULID使いたければ特徴と限界を理解した上で使えばいい
まだ比較的新しいものだから標準ライブラリ相当で安定した実装が提供されてる言語は少ない

二つの意味を持たせてる云々は少し考えればわかるでしょ
0765NAME IS NULL
垢版 |
2021/01/10(日) 00:03:48.39ID:???
ULIDはUUIDのパフォーマンス問題を軽減できるのが一番大きい
0766NAME IS NULL
垢版 |
2021/01/10(日) 07:38:57.64ID:???
>>765
インサートが遅くなるアレ?
ulid 解決できるんだ!?
0767NAME IS NULL
垢版 |
2021/01/10(日) 08:36:14.08ID:???
UUIDを主キーにするって人は、衝突しないって前提でやってるの?
0768NAME IS NULL
垢版 |
2021/01/10(日) 08:59:33.73ID:???
そりゃそのために作られたものなわけだし。使う場合はその前提に乗っかるのが当たり前。
0769NAME IS NULL
垢版 |
2021/01/10(日) 16:24:43.84ID:???
UUID使ってるシステム見たけど
データが無駄にデカイし
インデックスもやたら膨らむしで
主キーに使うのも考えもんだな
気持ちはわからんでもないが
0770NAME IS NULL
垢版 |
2021/01/10(日) 16:25:36.71ID:???
主キーなら衝突したらわかるでしょ
0771NAME IS NULL
垢版 |
2021/01/10(日) 18:29:44.20ID:???
>>770
衝突しない前提なら、衝突したときのリトライ処理等は不要だ
つまり衝突したときの対処してるかって質問だろ
0772NAME IS NULL
垢版 |
2021/01/10(日) 18:59:06.79ID:???
それはエラーをどう扱うかという話で衝突しない前提ではないよ
ユーザーにリトライを促すような個別の対処はしてなくても集約エラーハンドラで結局対処してる
0773NAME IS NULL
垢版 |
2021/01/10(日) 20:54:05.63ID:???
だから、UUIDが衝突したときに個別の対応してるかって質問なんだが
まあ、お前がやってないだろうことは理解した

GUIDが衝突したって話は聞いたことがある
UUID衝突の可能性はゼロではないんだが、まあ起こったときの重要度次第か
0775NAME IS NULL
垢版 |
2021/01/10(日) 21:33:58.44ID:???
UUIDやULIDって衝突した事を想定した方がいいの?
だったらオートインクリメントで良い気がする。
0776NAME IS NULL
垢版 |
2021/01/10(日) 21:36:18.27ID:???
トランザクションが失敗したらリカバリなりするだろうが、キーの重複が原因の時だけ特にどうこうってのはないんじゃないかね
0777NAME IS NULL
垢版 |
2021/01/10(日) 22:06:27.15ID:???
オートインクリメントのように一箇所で採番できる状況ならUUIDは使わないよ
0778NAME IS NULL
垢版 |
2021/01/10(日) 22:26:37.20ID:???
プロシージャー書いて自前で発番すれば良いのではないか
0779NAME IS NULL
垢版 |
2021/01/11(月) 18:12:04.80ID:???
UUID/ULIDよりも18禁商品マスタのほうがいかにもDB設計っぽい内容にもかかわらずレス数が桁違いになるのはなぜなんだ?
0780NAME IS NULL
垢版 |
2021/01/11(月) 19:03:34.36ID:???
>>747ならどっちが正しいと決まるもんでもないから、追加情報でもない限りそれ以上話が広がらないし
単純に内容がつまらない。
0781NAME IS NULL
垢版 |
2021/01/11(月) 21:33:51.50ID:???
設計スレなのにどっちが正しいか決まるようなものを期待してるのか
理解に苦しむ
0782NAME IS NULL
垢版 |
2021/01/11(月) 22:15:19.50ID:???
質問者はどっちがいいか聞いてるわけだろ?でもどっちでもいいから話はそこでおしまい。
0783NAME IS NULL
垢版 |
2021/01/11(月) 23:24:18.82ID:???
>>779
机上の知識だけでコメントしやすい内容か
設計の経験がないとコメントしにくい内容かの違い
珍しくにぎわってるからいいんじゃないの
0784NAME IS NULL
垢版 |
2021/01/27(水) 15:50:40.26ID:???
QiitaのWeekly Trendで4位に入ってたから読んでみたが・・・
https://qiita.com/abe_masanori/items/1a2b9c1f1069c43237f8

扱ってる題材のレベルが低いのは初心者向けだからいいとしても
こんな問題だらけのデータモデルとユースケース書いて平気な顔してる開発者はやばいよな?
0785NAME IS NULL
垢版 |
2021/01/27(水) 18:11:58.87ID:???
マイクロサービスとかいって、REST API 呼び出しをループで大量に実行しようとする
これの気持ちだけちょっとわかる

やれoop、やれdddのお作法に合わせて
少ない件数でテストしてできました!
とかやる奴
0786NAME IS NULL
垢版 |
2021/01/27(水) 21:24:38.53ID:???
Qiitaとか見てる奴いるんだw
0787NAME IS NULL
垢版 |
2021/01/27(水) 22:06:01.60ID:???
会員登録しないとまともに機能しないサイトは検索上位から消しほしいよ
0788NAME IS NULL
垢版 |
2021/01/27(水) 22:17:56.84ID:???
Googleで検索すると上位に出てきてしまうんだよな
判断力がない奴が読むと、とても危険
0790NAME IS NULL
垢版 |
2021/01/27(水) 23:29:01.05ID:???
サンプルだし目くじら立てるほどか?

グルグルSQLどころか
ぐるぐるコネクションされて
性能調査に回って来た時には吹いたから
気持ちはまあわかる

コードのオブジェクト指向的
美しさ、べき論を説かれたが
俺はプログラマーじゃないから
ようわからんかった
0791NAME IS NULL
垢版 |
2021/01/27(水) 23:59:32.65ID:???
コードの美しさよりも処理スピードの方が大事
0792NAME IS NULL
垢版 |
2021/01/28(木) 00:19:06.32ID:???
SQLだけでなんとかしようとするやつも困りもの
0793NAME IS NULL
垢版 |
2021/01/28(木) 00:57:25.39ID:???
ネットショップで画面に商品リストとその詳細仕様を表示する処理があったんだ
前任者はどう作ったかというと、まず商品一覧を取得するSQLを発行した
そのSQLが返してくれる商品一覧に対して、一つずつ詳細取得するSQLを発行した
10件位の時は問題がなかった。多分前任者はこれでOKにしたんだろう
ショップがオープンして、100件、1000件と扱うようになった途端、
メチャクチャに処理に時間が掛かるようになった
で、どう直したかというと、商品一覧を取得する段階で、細かく詳細も取得するようにした
詳細取得が商品種類毎に違っていて、SQLは場合分けが必要で複雑になってしまったが
客は結果を見て喜んでOKを出してくれた

なんでこうなったかと考えて見ると、詳細設計書段階で、
取得する手順の記述があったからのようだ
設計書はとてもシンプルで綺麗な記述になっていた

※この話はフィクションです、実在する人物・企業とは関係ありません
0794NAME IS NULL
垢版 |
2021/01/28(木) 07:25:30.60ID:???
1000件の詳細情報を、一度に取得して表示ねぇ...

まあなんにしても、DB設計の話じゃないな
0795NAME IS NULL
垢版 |
2021/01/28(木) 11:06:31.58ID:???
>>785
マイクロサービスに限らず逐次処理と一括処理とでAPIを分けるのが常識なので
テスト以前のAPIのレビュー時に気づくべきことじゃないか?
0796NAME IS NULL
垢版 |
2021/01/28(木) 13:02:17.02ID:???
SQLを直接書いてるのにN+1で問題になるようなコード書くような人間は周りにはいないな

ORM経由のN+1は仕組みをよく理解してない人間がやらかすけど
そういうのも本番環境に出る前には確実に修正される

DB側で検知する仕組み入れとくと確実かもね
0797NAME IS NULL
垢版 |
2021/01/28(木) 19:08:58.61ID:???
>>784
これはヒドイ

プレミアム会員フラグや商品価格を変更できないw
ぐるぐる以前の問題
0798NAME IS NULL
垢版 |
2021/01/28(木) 20:39:20.13ID:???
商品価格変更されたらどうするんだろうと悩ませておいて、問題文の隅っこに
「価格改定の場合は新規に商品IDを発行する」なんて条件が書いてあったりする
情報処理試験のパターン。
0799NAME IS NULL
垢版 |
2021/01/29(金) 14:26:13.74ID:???
>>798
同じ商品に対して複数のPKを発行できるようにするならモデルが違ってくる
0800NAME IS NULL
垢版 |
2021/01/29(金) 16:10:44.32ID:???
情報処理試験を受けさせてるベンダーほどまともなDB設計できないよね
0801NAME IS NULL
垢版 |
2021/01/29(金) 18:53:57.86ID:???
このタイプの派生関係を使う場合は
読み取り用にはViewを用意してやるといい
各SQLで毎回ケアするのは無駄
0802NAME IS NULL
垢版 |
2021/01/29(金) 22:45:33.21ID:???
>>799
>同じ商品に対して複数のPKを発行

意味不明。
「同じ商品に対して複数の商品ID」なら意味が通じなくもないが
その部分は>>784には描かれていない。
0803NAME IS NULL
垢版 |
2021/01/29(金) 23:19:36.29ID:???
>>802
「同じ商品に対して複数の商品ID」を発行するとして
どうやって同じ商品かどうかを判別するの?
0804NAME IS NULL
垢版 |
2021/01/29(金) 23:26:28.28ID:???
どうやってもなにも、「同じ商品」を判別できるデータを持たせるしかないわな。
0805NAME IS NULL
垢版 |
2021/01/30(土) 00:26:36.49ID:???
同じ商品かどうかを判別するための識別子が必要だよね
それを一般的には商品IDと呼ぶことが多いから複数の商品IDじゃなく複数のPKと書いたわけ

名前は別にいいんだけど
同じ商品に対して価格別に複数の商品ID(PK)を発行するのなら
それをモデルに描かないのはありえない

それにある商品の標準価格を変えようとすると
対応するプレミアム価格も変更が必要になる
なら別テーブルにする意味ない
0806NAME IS NULL
垢版 |
2021/01/30(土) 03:02:35.12ID:???
一つの商品ID、商品テーブル、価格テ―ブルで良くね?
0807NAME IS NULL
垢版 |
2021/01/30(土) 08:22:17.42ID:???
>>805
>名前は別にいいんだけど
>同じ商品に対して価格別に複数の商品ID(PK)を発行するのなら
>それをモデルに描かないのはありえない

そりゃ設計書としてならあり得なんだろうが実際>>784には商品とか
商品名とか描いてないじゃん。そこで説明したいポイントには関係ないから
省略したんだろうが。

>同じ商品かどうかを判別するための識別子が必要だよね
>それを一般的には商品IDと呼ぶことが多いから

一般にはそういうことが多いとしても、「商品ID」は絶対そうでなくては
ならないという決まりも無いわけなんで、そこはちゃんと定義を
確認しなきゃならん。

>複数の商品IDじゃなく複数のPKと書いたわけ

PKってのはテーブルの定義なんでそこは明らかに間違い。
「商品に対する商品ID」か「商品テーブルのPK」じゃなきゃ
意味が通じない。
0808NAME IS NULL
垢版 |
2021/01/30(土) 11:58:25.05ID:???
>>798
>「価格改定の場合は新規に商品IDを発行する」

その場合でも注文データに確定した支払い金額を記録するぞ
バッチ処理でユーザーごとの購入金額を集計するのに
マスタから価格持ってくるような設計はやばい
0809NAME IS NULL
垢版 |
2021/01/30(土) 12:01:57.13ID:???
>>807
わかってないのに無理してレスすんな
0810NAME IS NULL
垢版 |
2021/01/30(土) 12:23:10.14ID:???
子供の喧嘩じゃないんだから、反論があるなら具体的にな
0811NAME IS NULL
垢版 |
2021/01/30(土) 12:49:10.58ID:???
長いからちゃんと読んでないけどあの記事で言いたいのって
ぐるぐる SQLは性能に問題が出るからやめようねって話なんじゃないの?
テーブル設計はあくまで例であって、そこをここで突っ込んでも…
0812NAME IS NULL
垢版 |
2021/01/30(土) 15:04:12.14ID:???
でもレス返してるやつはそれで正しいと思って返してるのでは?
0813NAME IS NULL
垢版 |
2021/01/30(土) 16:13:55.14ID:???
いいも悪いもあれだけで断言できんだろ
0814NAME IS NULL
垢版 |
2021/01/30(土) 17:35:24.51ID:???
>>811
まともなDB設計ならぐるぐるSQLすら発生しないだろ
0815NAME IS NULL
垢版 |
2021/01/30(土) 18:02:21.65ID:???
そしたら件の記事は設計変更しないでぐるぐる解消しているから「まともな設計」ってことになるが
0816NAME IS NULL
垢版 |
2021/01/30(土) 18:13:42.82ID:???
>>790
コードの美しさとは無関係というか両立できる問題じゃないかなあという気がするんだがどうなんだろう
> ぐるぐるコネクションって、ループの内部で都度接続と切断繰り返してる処理であってる?

>>808
現時点の注文(=買い物かご)と注文履歴は別管理なんじゃねって言う勝手な想像
0817NAME IS NULL
垢版 |
2021/01/30(土) 18:14:32.10ID:???
運用面で破綻しなければそれはそれでよい設計なのでは?
うちの販売システムは発注伝票の内容は全てトランザクションデータとして保存するし
商品マスタは通常もセットも含めて1テーブルだけど
0818NAME IS NULL
垢版 |
2021/01/30(土) 18:49:31.12ID:???
>>806
顧客や顧客種別ごとに単価を管理する場合はそうするのが普通

ただプレミアム会員向けの単価が登録されてなければ標準単価を採用するみたいなロジックはアンチパターンだから普通はやらない

単価を管理してるテーブルを読む段階でどのレコードを読めばいいか指定できるよう設計する
0819NAME IS NULL
垢版 |
2021/01/30(土) 23:22:05.33ID:???
>>816
コードの美しさ云々は単なるいいわけでしょ
リモートのAPI呼び出しをローカルに閉じた関数呼び出しと同じように扱おうとする連中と同じ
0820NAME IS NULL
垢版 |
2021/01/30(土) 23:26:08.18ID:???
陽キャ先輩「それDBに任せるともっと良くなるかも!」
俺「一瞬で終わって草ァ!SQLすげぇwwwwwwww」

陰キャ先輩「はぁ…ぐるぐるSQLは止めてください」
俺「あっ すみません気を付けます… ぐるぐるって何でしょうか…」
陰キャ先輩「知らないの?スキーマがこうでアプリのコードがこうだとするでしょ」
俺「あっあっ はい」
陰キャ先輩「ループがねオーバーヘッドがねマイクロサービスとか言ってる奴等なんて」
俺「はい… はい…」
0821NAME IS NULL
垢版 |
2021/01/31(日) 05:54:37.13ID:???
>>807
>そこで説明したいポイントには関係ないから省略したんだろうが。
そもそも、元のやつの設計が複数の商品IDを発行する設計だと思ってるのか?

つかまあ、あれはほんとのシステムの設計としてはあり得んレベルだけどな
あの記事が言いたかったのはそんなことじゃないだろ
0822NAME IS NULL
垢版 |
2021/01/31(日) 09:41:56.04ID:???
一例を出してこういう処理の仕方はやめましょうっていう内容の記事に対して
本番稼働を前提に設計レビューをしてくれる掲示板
0823NAME IS NULL
垢版 |
2021/01/31(日) 11:13:07.54ID:???
>>818


単価を管理してるテーブルを読む段階でどのレコードを読めばいいか指定できるよう設計する

これと、価格テーブルが1個であることとは矛盾しない

価格種別を決定するコンテキストがあれば良い
0824NAME IS NULL
垢版 |
2021/01/31(日) 11:17:15.54ID:???
サンプルだからいいってレベルじゃないんだよな
あれを許容できるやつは普段同レベルの設計をしてるとしか思えない
0825NAME IS NULL
垢版 |
2021/01/31(日) 11:24:40.01ID:???
求職サイトだから仕方がない
0826NAME IS NULL
垢版 |
2021/01/31(日) 11:31:41.57ID:???
>>823
それ同じこと言い換えてるだけだよ
0827NAME IS NULL
垢版 |
2021/01/31(日) 15:21:03.28ID:???
根本原因が稚拙なDB設計にあるにもかかわらず
それを理解せずに場当たり的なSQLの修正しか考えないのは悪手でしかないわな
0828NAME IS NULL
垢版 |
2021/01/31(日) 15:53:35.89ID:???
>>827
下請け孫請けでDB設計には口出しできないんだろ
0829NAME IS NULL
垢版 |
2021/02/02(火) 10:43:18.74ID:???
実際問題、後からDB設計間違えたって気づいたらどうする?
運用中のものを停止してでもやり直す?
それとも現状を変えずに追加し続ける?
0830NAME IS NULL
垢版 |
2021/02/02(火) 12:21:21.06ID:???
どういう種類の間違いなのかとそれによってどういう問題が発生しているのかによる

放置
ちょろっと修正
次のプロジェクトで合わせて修正
独立した修正プロジェクトで対応
障害として対応
0831NAME IS NULL
垢版 |
2021/02/02(火) 14:32:11.31ID:???
上で例に出てた注文テーブルのような設計なら
良くて修正プロジェクト、悪いと障害対応だろうな
0832NAME IS NULL
垢版 |
2021/02/02(火) 19:43:17.14ID:???
本番リリース後ならちょろっと修正はないわ

問題がなければ基本放置だが、遅いとかいうクレームでたらまあ協議だな
0833NAME IS NULL
垢版 |
2021/02/02(火) 22:02:04.11ID:???
ポイントはそれを放置した場合にどういうリスクがあるかだよな。
データや処理の間違いで被害を出す恐れがあるなら早めに対処しなきゃならんだろうが、
それも予想される被害の大きさと発生確率によるリスク算定次第。
運用で逃げられるようなものだったら後回しにしたり。

>>831
障害と言えるような具体的な不具合って挙がってたっけ?
0834NAME IS NULL
垢版 |
2021/02/02(火) 22:40:37.58ID:???
>>833
DB設計は単体で障害になるわけじゃないから
アプリの仕様や運用、ビジネス要件との合わせ技
0835NAME IS NULL
垢版 |
2021/02/03(水) 10:02:04.48ID:???
ま、基本的には機能追加が目的だろうな
悪い設計のまま追加するか、それともやり直すか
前者だとコストもリスクも低いが、将来困る
後者だとその逆。

経営判断なら前者になるだろうな
0836NAME IS NULL
垢版 |
2021/02/03(水) 12:42:18.54ID:???
普通の販売管理でこんな設計ないから続ける意味がないと思ってる
0837NAME IS NULL
垢版 |
2021/02/03(水) 13:14:58.53ID:???
無いことはないだろ。国のシステムがしょっちゅう問題になってるじゃん。
似たようなことは日常茶飯事で起きてると思うぞ
0838NAME IS NULL
垢版 |
2021/02/03(水) 18:03:06.12ID:???
>会員は1回の注文あたり1種類の商品を複数個注文できる。
注文っていったら1回で複数商品注文とかするだろ?
注文テーブルにそんな考慮もないようなシステムで何をするんだい?w
0839NAME IS NULL
垢版 |
2021/02/03(水) 18:27:35.71ID:???
>>838
1注文あたり1種類の商品のみというビジネスモデルも実際に存在するぞ
0841NAME IS NULL
垢版 |
2021/02/03(水) 20:13:09.59ID:???
あの元記事書いた人の最大の失敗は、注文とか商品とか言っちゃったことだな
単にテーブルAがテーブルBを参照し、とか言ってればよかったのにな
0842NAME IS NULL
垢版 |
2021/02/03(水) 20:24:10.77ID:???
>>839
UIで制限することはあってもそんなビジネスモデル前提で設計しないと思うけどなぁ
まあ要件みたせばあんなDB設計でもいい人もいるんだからいいのか
0843NAME IS NULL
垢版 |
2021/02/03(水) 20:44:09.02ID:???
1注文に複数商品IDを含めることができるようにするならその分構造が複雑になるわけだから
そういう要求がない限りシンプルな構造にしておくという考え方はあると思うが。
0844NAME IS NULL
垢版 |
2021/02/03(水) 21:48:04.89ID:???
1注文あたり1種類の商品しか注文できないとか
価格変更時は必ず新しい商品IDになるとかは実際にあるけど
注文データに金額を記録しないのは伝票としての要件を満たさないからまずありえない
0845NAME IS NULL
垢版 |
2021/02/03(水) 22:24:40.50ID:???
>伝票としての要件を満たさない

どんな要件を満たしてない?
0846NAME IS NULL
垢版 |
2021/02/04(木) 15:35:48.76ID:???
>>819
特定のDBMSや永続化技術を意識するレイヤーと
ループしながらビジネスルールの判定をするレイヤーを分けたい場合に
ループが途中でブレイクしても確実にコネクションを切断する仕掛けが必要になる

言語やプログラマのスキルによってはその仕掛けが実現できないので
ぐるぐるコネクションになっちゃう
0847NAME IS NULL
垢版 |
2021/02/04(木) 16:05:13.13ID:???
簡単そうな話題だといつまでも話が続くね
0848NAME IS NULL
垢版 |
2021/02/04(木) 20:16:34.87ID:???
話が続かなかった難しい話題って例えばどれ?
0849NAME IS NULL
垢版 |
2021/02/04(木) 21:22:56.40ID:???
ulid をdb側(mysql )で発番したいんだけど、自分で実装するしかない?

一応、日時(例えば20210204125959001)と乱数(80bit分)は作った。
BASE32に変換出来無いから、10進数を36進数(0-9 A-Zの36。CONV関数使用)してみた。
内部だけで使うならアリなんだけど、ユーザーに見えるところはBASE32がいいんだよなぁ。。。
0851NAME IS NULL
垢版 |
2021/02/05(金) 07:22:54.69ID:???
このスレ的には、単一参照テーブル、又の名をOTLT
は結論出てたりする?

https://gihyo.jp/dev/serial/01/sql_academy2/000301

うちの古いシステムは大量にある名称マスタをこの方法で取り扱ってるけど、
やめた方がいいのかなと。
0852NAME IS NULL
垢版 |
2021/02/05(金) 12:23:22.50ID:???
>>851
DB設計の観点からだけいえばEAVと一緒で100%やめたほうがいい
ポリモーフィズムでもなければオブジェクト指向は全く関係ない
RDB以前の汎用機で使われてたやり方

実際にやめるかどうかはシステムの寿命や変更の頻度を考えた場合に
手間をかけるメリットがあるかどうか
0853NAME IS NULL
垢版 |
2021/02/05(金) 12:31:10.80ID:???
>>852
流石に動いてるものは触れない。
仮に新しく作り直すとしたら
大量にマスタが作られて、大量にCRUDの画面が作られる問題が出てくる
これ皆どう解決してるんだろう
もう気にせず愚直に作った方が精神的にもシステム的にもいいんだろうか。
0854NAME IS NULL
垢版 |
2021/02/05(金) 17:00:05.17ID:???
>>851
自分だったら単一参照テーブルにするなら内部キー(PK)・識別子・外部キー・内容の様にして
トランザクションには内部キーを保持したい
理由はテーブルの結合の際にトランザクションとマスタを外部キーで結合して
さらに識別子をハードコードするのは抵抗があるから
でもこういう設計をしても結合の際に識別子を条件に付ける人がいそうなので困る
0855NAME IS NULL
垢版 |
2021/02/05(金) 18:14:28.40ID:???
>>854
複合キーじゃなくサロゲートキーを導入するという話なんだろうけど
識別子や外部キーって用語の使い方を間違えてるから全然伝わらないぞ

識別子は基本的にそれによって行を特定できるキーのこと
外部キーはForeign Keyのこと
商品IDとJANコードのようなのは内部ID/外部IDとは言うけど外部キーとは言わない
0856NAME IS NULL
垢版 |
2021/02/05(金) 18:17:26.28ID:???
>>853
マスタメンテ画面が必要ないものもたくさんあると思うんだけど
必要なら汎用的なマスタメンテ画面を作ればいいんじゃない
0857NAME IS NULL
垢版 |
2021/02/05(金) 19:08:27.08ID:???
>>855
お前が勝手に言葉変えてるだけだろ
0858NAME IS NULL
垢版 |
2021/02/05(金) 19:08:56.72ID:???
>>856
いっぱいお客さんいると男女ですら変更したいという要件もある…
さらにやっぱり英語名も持ちたいとか色々要件増えて管理する項目も微妙に変わってくんだよな…
で、それを汎用項目みたいな持たせ方してるんだよ…

恥ずかしながらこの記事の作者同様、若い頃は便利だなあと思ってた。

よし、一念発起してSexMaster作るか
0859NAME IS NULL
垢版 |
2021/02/05(金) 21:09:23.08ID:???
ここまで、>>851がダメな理由を明確に説明できる奴皆無
0860NAME IS NULL
垢版 |
2021/02/05(金) 21:31:59.63ID:???
>>858
メンテが必要でSQLで手動更新しないなら画面用意する他ないな
Railsのようなのでscaffoldでサクサク作るか
metadata用のAPI使ってOTLTと同じような共通汎用メンテ画面を作るか
0862NAME IS NULL
垢版 |
2021/02/05(金) 21:42:58.60ID:???
>>861
そういうスレだしな。
でも根拠なしにテキトーなこと言ってるだけの奴は「ググれ」「自分で考えろ」とかいってごまかす。
0863NAME IS NULL
垢版 |
2021/02/05(金) 22:54:38.55ID:???
>>862
記事に欠点が列挙されてるんだがそれは読んだのか?
0864NAME IS NULL
垢版 |
2021/02/05(金) 23:09:49.13ID:???
メリットデメリット併記されていて、少なくとも「100%やめたほうがいい」なんて断言はしてないと思うが
0865NAME IS NULL
垢版 |
2021/02/06(土) 00:05:44.88ID:???
それはミック氏の考え方だからな
SQLには詳しいけどDB設計に詳しい人ではないから
0866NAME IS NULL
垢版 |
2021/02/06(土) 00:11:31.24ID:???
一番大きな欠点は参照整合性を担保できなくなる点
記事にメリットとしてあげられてる点も鵜呑みにせず本当かどうか考えたほうがいい
0867NAME IS NULL
垢版 |
2021/02/06(土) 05:47:12.37ID:???
じゃあ皆さんの設計する社員マスタはセックスマスターを参照しているんですか?
0868NAME IS NULL
垢版 |
2021/02/06(土) 09:45:46.26ID:???
>>866
正確に言うと、件のマスターの主キーが複合主キーになるから参照整合性制約をかけようとするなら
面倒くさい&無駄ってことだね。
それを必要としない用途で使う分には問題ないかもしれない。
0869NAME IS NULL
垢版 |
2021/02/06(土) 14:26:16.22ID:???
>>868
そう
担保するためには複合主キー+チェック制約がいるので
OTLTを1つ参照するたびに2カラム必要になってヒドイことになる

参照する側が取りうる値の範囲を参照制約以外で担保する前提で
異なるコード体系じゃなく統一されたコード体系のテーブルなら
DB設計的にも有りだけどそれはもうOTLTじゃない
0870NAME IS NULL
垢版 |
2021/02/06(土) 19:44:15.11ID:???
それOTLTとか関係なく複合主キーの問題なんじゃね
0871NAME IS NULL
垢版 |
2021/02/06(土) 20:44:19.48ID:???
そもそも
> OTLTを1つ参照するたびに2カラム必要になってヒドイことになる
とか感覚で語ってる奴の相手しなくていいかと
0872NAME IS NULL
垢版 |
2021/02/06(土) 21:33:46.92ID:???
これだけ解説してもらってもわからないってどういうことよ
0873NAME IS NULL
垢版 |
2021/02/06(土) 21:40:35.94ID:???
>>869
1:男←性別
2:女
3:北海道←ここから都道府県
4:青森
...
80:赤←ここから色
81:青

みたいに管理するってこと?
0874NAME IS NULL
垢版 |
2021/02/06(土) 21:58:10.25ID:???
そもそもOTLTを検討するようなデータは制約をつけるようなデータは管理しないのでは
自分が設計したDBは可変特にユーザーが何か設定するようなデータは必ずマスタとして登録してたわ
何でもかんでも使うのは乱暴だけど純粋にシステムとして値と内容だけで完結するようなデータであればありだと思う
0875NAME IS NULL
垢版 |
2021/02/06(土) 22:46:52.67ID:???
>>874
よくわからん
必ずマスタとして登録って、つまりOTLT的なマスタのこと?
0876NAME IS NULL
垢版 |
2021/02/06(土) 23:18:19.50ID:???
わからないならしかたない
0877NAME IS NULL
垢版 |
2021/02/07(日) 08:38:41.24ID:???
みんなセックスマスター作ってるのか?
0878NAME IS NULL
垢版 |
2021/02/07(日) 10:46:31.05ID:???
みんなあーだこーだ言うだけで
セックスマスター持ってるかどうかまでは言及しないな
0879NAME IS NULL
垢版 |
2021/02/07(日) 13:58:15.18ID:???
>>873
それは統一されたコード体系で扱えるデータじゃないからすぐ破綻すると思うが
データ構造だけで言えば下のように管理して特定の値はIDのみで引けるようにしておくイメージ
表示の多言語対応なんかで使う

ID:カテゴリ:表示名
1:性別:男
2:性別:女
3:都道府県:北海道
4:都道府県:青森
...
80:色:赤
81:色:青
0880NAME IS NULL
垢版 |
2021/02/07(日) 13:59:52.25ID:???
性別はわざわざ参照テーブルを用意するほどじゃないことが多い
作る場合はgenderテーブル
0881NAME IS NULL
垢版 |
2021/02/07(日) 14:01:55.50ID:???
性別には、「未回答」、「回答拒否」って場合もあるんだろうか
0882NAME IS NULL
垢版 |
2021/02/07(日) 14:58:31.26ID:???
>>881
うちは男性、女性、不明で管理してるけど
この手の区分は全てドキュメントの辞書管理してるだけでわざわざテーブルに登録してない
0883NAME IS NULL
垢版 |
2021/02/07(日) 20:16:00.19ID:???
100万件の会員データcsvで出力してください
性別は名称付きでってなったらどうするの?
0884NAME IS NULL
垢版 |
2021/02/07(日) 20:25:45.49ID:???
>>883
case で名前に変換すりゃいいだけじゃね
0885NAME IS NULL
垢版 |
2021/02/07(日) 20:48:57.88ID:???
むむ、じゃあ今日だけ、男じゃなくて雄でだしてほしいんだよな〜って言われたらどうするの
0886NAME IS NULL
垢版 |
2021/02/07(日) 21:03:19.72ID:???
αβΩとか入ってくるとややこしいなぁ
0887NAME IS NULL
垢版 |
2021/02/07(日) 21:09:16.30ID:???
データがあればいくらでも出力できるだろ
生年月日は和暦でお願いといっしょでここでする話じゃない
0888NAME IS NULL
垢版 |
2021/02/07(日) 21:11:51.65ID:???
>>885
今日だけSQL書き換えればいいだけでしょ
アドホックな要求ならそれで充分
0889NAME IS NULL
垢版 |
2021/02/07(日) 22:24:53.92ID:???
今日は♂になりました
0890NAME IS NULL
垢版 |
2021/02/07(日) 22:40:40.47ID:???
>>888
保守性が低い
あなたの会社は毎回sql書き換えてリリースされるのですか
0891NAME IS NULL
垢版 |
2021/02/07(日) 22:54:02.61ID:???
アドホックに表示名を変更するためだけに
マスタを変更するほうが保守性が低い
0892NAME IS NULL
垢版 |
2021/02/07(日) 23:07:35.14ID:???
馬鹿はかまわないほうがいいぞ
0893NAME IS NULL
垢版 |
2021/02/07(日) 23:10:40.93ID:???
性別はともかくどこまでマスタ管理するかだよなあ
令和のために元々管理していなかった元号をマスタ管理するようになったところは多いと思う
0894NAME IS NULL
垢版 |
2021/02/07(日) 23:12:38.92ID:???
保険会社みたいに性別が重要な情報で
それを含む会員データをいろんな用途で使うなら間違いなく性別マスターを作る

でも今回発送するDMに限っては”男性”じゃなく”♂”で表示したいとなっても
性別マスターを更新して対応したりはしない

アドホックに表示をカスタマイズしたいという要望が
恒常的に発生してシステム化が必要な場合は
カノニカルな表記とは別にマッピング機能を追加する
0895NAME IS NULL
垢版 |
2021/02/08(月) 05:59:15.42ID:???
>>890
アドホックの意味わかる?
まあ100万件超えないならExcelにエクスポートして置換でもいいかもな
0896NAME IS NULL
垢版 |
2021/02/08(月) 06:07:15.07ID:???
>>891
保守性と言うかどこで使われてるかわからんマスタの変更なんて簡単にできないよね
本当にいろいろな表示の仕方が恒常的に要求されるならマスタに表示用の列を複数持つわ
id|表示名1|表示名2|表示名3|…
1|男|♂|雄|…
2|女|♀|雌|…
0897NAME IS NULL
垢版 |
2021/02/08(月) 07:03:16.85ID:???
アドホック(ad hoc)は、「特定の目的のための」「限定目的の」などといった意味のラテン語の語句である。

ラテン語はわからないです…
0899NAME IS NULL
垢版 |
2021/02/08(月) 12:49:21.91ID:???
>>896
「今日だけ絵文字で表示したいんですけど〜」
「じゃ、お列追加しときますね〜」
0900NAME IS NULL
垢版 |
2021/02/08(月) 15:13:29.86ID:???
>>899
日本語理解できないのか?
> "恒常的" に要求されるならマスタに表示用の列を複数持つ
今日だけの話ならcaseでも専用の表示マスタでも好きにやってくれ
0901NAME IS NULL
垢版 |
2021/02/08(月) 15:45:13.95ID:???
恒常的に要求されてもこのケースは列持ちすべきじゃない
0902NAME IS NULL
垢版 |
2021/02/08(月) 16:19:26.78ID:???
DB設計もしたことない奴が書き込んでるだから無視したほうがいいぞ
俺の中では851なんて全体で合意をとればいい話でどっちだってかまわないと思ってる話題
ただ値(ID、コード)にAは数値、Bは文字と意味を持たせたいなら別管理したほうがストレスはないと思う
0904NAME IS NULL
垢版 |
2021/02/08(月) 17:50:13.97ID:???
>>903
id|表示名1|表示名2|表示名3|表示名4|表示名5|表示名6|表示名7|表示名8|…

↑こういう設計見たらどうするの?
0905NAME IS NULL
垢版 |
2021/02/08(月) 17:51:51.04ID:???
扱うシステムの規模にもよるだろうが、大量に名称マスタが必要なシステムだと方向性間違えると辛いことになる

マスタを全て分けると必要最低限の管理画面が必要。その開発工数がバカにならない。

上でも挙がっているが
Rubyのスキャフォールドは便利だが、大規模システムで動的型付け言語は別の点でやばくなる。
asp.net mvcのスキャフォールドはrubyのパクリだが静的型付けなのでまだマシ。
これらに限らず最近のフレームワークは似たような構築機能があるだろう。

加えてシステムの変更に強い。
この名称マスタだけカラムを追加したいみたいなことに対応しやすい。

小規模で変更がないシステムであれば…名称マスタも少ないだろからやっぱりちゃんとマスタ作ったほうがいいんじゃない?
0906NAME IS NULL
垢版 |
2021/02/08(月) 18:32:42.95ID:???
>>904
いいんじゃないの?
表示名nみたいな名前はどうかと思うけど
で、>>903の回答は?
0907NAME IS NULL
垢版 |
2021/02/08(月) 19:34:38.74ID:???
セックスマスター作る派のやつは、セックスマスターメンテナンス画面もつくるのか?
0909NAME IS NULL
垢版 |
2021/02/08(月) 20:54:45.84ID:???
"ぼくのかんがえた最強のセックスマスター"が瞬殺されて涙目の素人さんwww
0910NAME IS NULL
垢版 |
2021/02/08(月) 21:12:25.50ID:???
>>907
セックスマスターにインサートしちゃう
0911NAME IS NULL
垢版 |
2021/02/08(月) 21:27:56.93ID:???
>>909
そういうゴタクはよりマシなセックスマスター提示してから言わないと恥ずかしいだけやでww
0912NAME IS NULL
垢版 |
2021/02/08(月) 21:34:52.75ID:???
セックスマスター作らない人は
TO_DOU_FU_KEN_MASTERも作らないの?
0914NAME IS NULL
垢版 |
2021/02/08(月) 22:52:38.12ID:???
>>905
マスタを分けてもテーブルの構造に応じて
メンテ画面の内容が変わるようなのを1つ作っとけばいいだけでしょ
異なるコード体系を1カラムに詰め込むのはC#でdynamic typeを使うようなもの
0915NAME IS NULL
垢版 |
2021/02/08(月) 23:14:23.60ID:???
>>907
都道府県マスターと同じでメンテ画面は必要ないことのほうが多い
0916NAME IS NULL
垢版 |
2021/02/09(火) 12:09:04.76ID:???
>>914
異なるコード体系を1カラムに突っ込むなんて書いてないつもりなんだが。

んで、そういう動的に画面生成されるようなやつってどうなんだろ
動的にsql組み立てることになって結局メンテナンスしづらくなると思う。
0917NAME IS NULL
垢版 |
2021/02/09(火) 12:45:28.48ID:???
表示を日本語でするか英語でするかを、
使用するユーザーが決める
それと同じように作ればいい
0918NAME IS NULL
垢版 |
2021/02/09(火) 16:02:15.61ID:???
>>916
>加えてシステムの変更に強い。
>この名称マスタだけカラムを追加したいみたいなことに対応しやすい。

じゃ”この名称マスタ”ってどういう構造を想定して言ってるの?
0919NAME IS NULL
垢版 |
2021/02/09(火) 16:11:20.57ID:???
>>917
それをRDBでやる方法がよくわからないからOTLTみたいなものになってるんだろうね
0920NAME IS NULL
垢版 |
2021/02/09(火) 17:16:30.95ID:???
わかってるやつは話題にはいってこない内容だし
バカが話を脱線させるから851みたいな話はおわらないw
0921NAME IS NULL
垢版 |
2021/02/09(火) 17:51:32.88ID:???
>>918
おれはOTLTじゃなくて
性別マスタ、都道府県マスタで別に管理しましょう派だよ?

たとえば都道府県マスタに名産物列を追加しましょう。
メンテナンス画面はめんどくさいけどちまちま直しましょう。
ってこと。
0922NAME IS NULL
垢版 |
2021/02/09(火) 17:56:14.58ID:???
コードと名称以外の属性持つ前提ならOTLTなんて考えないのでは
OTLTを前提にするならコードと名称以外の属性はもたないでしょ
0923NAME IS NULL
垢版 |
2021/02/09(火) 18:15:45.02ID:???
>>922
そんな前提はすぐ崩れる
ソフトウェアには変更がつきもの
0925NAME IS NULL
垢版 |
2021/02/09(火) 18:44:25.95ID:???
>>923
もともとの要件にない話なら問題外
開発中の変更であれば別テーブルに変更すればいいだけ
そもそもコードと名称しか管理しない前提の都道府県情報に
名産物なんて項目を増やすようなシステムなら最初から別テーブルになるし
そんなこと言い出したらOTLT禁止の前提でシステム(DB)設計してると思うわ
こういう話はごねたいだけの話題にしかならんね
0926NAME IS NULL
垢版 |
2021/02/09(火) 18:45:47.69ID:???
>>916
>動的にsql組み立てることになって結局メンテナンスしづらくなると思う。

動的sql的なものは使わざるをえないけどORM使えば全然大変じゃない
0927NAME IS NULL
垢版 |
2021/02/09(火) 19:25:24.73ID:???
>>925
だから禁止っつうかOTLT使うなって言ってるつーの
0928NAME IS NULL
垢版 |
2021/02/09(火) 19:27:36.02ID:???
>>926
そんなORMあるか…?
そのobjectの型定義はどうなってるんだ?
AcriveRecord?
0929NAME IS NULL
垢版 |
2021/02/09(火) 19:53:07.87ID:???
>>927
0なし
1あり
しか持たない〇〇テーブルたくさん持つの?
0930NAME IS NULL
垢版 |
2021/02/09(火) 20:30:48.58ID:???
>>929
他の人も書いてるように、メンテナンスが発生しない&コードが少ないのであれば
メモリ内に持つ

意外とOTLT派が多いね
自分も大昔使っていたが、害の方が多いという印象。
0931NAME IS NULL
垢版 |
2021/02/09(火) 21:24:37.20ID:???
>意外とOTLT派が多いね

「OTLT派」ってほど積極的に肯定している人はいないんじゃないかな。
ダメな理由がないなら使ってもいいじゃん、程度だと思うけどね。

>自分も大昔使っていたが、害の方が多いという印象。

その「害」を具体的に挙げたら建設的な議論になると思う。
ひとつは上で参照制約の話が挙げられていたが。
0932NAME IS NULL
垢版 |
2021/02/09(火) 21:47:29.79ID:???
こんな害

レコードが増えすぎると性能に影響が出る。そんな大量に突っ込むなよってはなしだが、使い所を分かってない人間はなんでも入れてくる。

変更に強いようで弱い。汎用性を意識して予備カラムみたいなのを用意するが結局足りなかったり、数値型と言ってもintとnumber、日付も時間まで持つかどうかで変わる。
型は厳密に。null非許容にできないのも痛い。

汎用性を重視するあまりカラム名が曖昧になる(なんとか1,2,3)
名前が適当だと後でわからなくなる。

それぞれにViewを定義したりして誤魔化してきたけど、使い所を誤る人がどうしても出てくるのだ。
0933NAME IS NULL
垢版 |
2021/02/09(火) 21:56:11.05ID:???
ありがとう。
そうやって具体的に挙げてもらえたら、あとは自分の案件にとってそれが
「害」になるのかどうか判断すりゃいいだけだね。
0934NAME IS NULL
垢版 |
2021/02/09(火) 22:13:24.03ID:???
>>928
ActiveRecordにしろEFにしろORM経由でテーブルを扱うタイミングでは
ORMがテーブルの型を認識できてる必要はあるよ

Rubyなら動的に型定義可能なので
実行時に汎用メンテ画面で扱うテーブル一覧をDBから読み込んで
それ用のclassを定義したらActiveRecordで扱える

C#でも動的に型定義できるけどちょっと面倒くさいので
テーブルを新規に追加した時はスキャフォールドして型定義をプログラムに追加しとけばいい
テーブル名を変数で渡されたらリフレクションで型にすればあとは普通に使える
0935NAME IS NULL
垢版 |
2021/02/09(火) 22:33:31.23ID:???
>>934
スキャフォールドって
モデルからViewとコントローラーのコードが生成されるけど
それぞれモデル名が頭につくから
SexControllerみたいになるよね
それにテーブル名渡すの?

urlがapi/v1/Sex/Index?table=sexみたいになるのかな?
で、EFは使わず、動的にsqlを組み立てるってこと?
なかなか強引だな。
0936NAME IS NULL
垢版 |
2021/02/09(火) 22:38:32.80ID:???
>>932
これ書いといてなんだけど、同じデータベースの構成でいろんなお客さんにシステム導入しようとするとEAVの問題が出てくるんだよな
で、xmlやjsonを列に突っ込んでる

型を厳密にと言っときながら厳密でない型の列を定義してる俺を罵ってくれ
0937NAME IS NULL
垢版 |
2021/02/09(火) 22:53:09.69ID:???
別に同業他社の人に評価してもらうのではなく使ってもらうユーザーに評価してもらってOKならそれでよくね?
誰が見ても使っても満点の設計なんてできない以上それでかまわないと思うけど
0938NAME IS NULL
垢版 |
2021/02/09(火) 22:58:26.92ID:???
うん、でもそれいっちゃうとこのスレ要らなくない?
0939NAME IS NULL
垢版 |
2021/02/09(火) 23:00:45.47ID:???
>>935
ビューやコントローラを生成する必要はないから
モデルファーストでテーブルを追加/更新するならそのモデル定義をプログラムに追加するだけ

スキャフォールドって言ったのはデータベースの定義を読んでEFで扱えるようにするための話
> dotnet ef dbcontext scaffold --table Hoge
0940NAME IS NULL
垢版 |
2021/02/09(火) 23:38:34.79ID:???
>>939
ViewContoroller使わないのは納得した。

渡したテーブル名はどこで使うの?

pocoで定義されたクラスに値入れて、addしてsavechanges
てのがEFの普通の流れだけど
そのクラス名はhogeだよね

そのクラス名が動的に変わる?
0941NAME IS NULL
垢版 |
2021/02/11(木) 09:05:41.50ID:???
>>921
この手のほぼ更新のないマスタテーブルはDB管理者がsqlでメンテだな
0942NAME IS NULL
垢版 |
2021/02/11(木) 11:59:29.12ID:???
>>940
リフレクション使うんだよ
カラム名やデータ型を共通化できるなら
リフレクションじゃなくジェネリックでも対応可
0943NAME IS NULL
垢版 |
2021/03/27(土) 19:52:09.74ID:JXErytnT
>>1000

日本人はカス民族。世界で尊敬される日本人は大嘘。

日本人は正体がバレないのを良い事にネット上で好き放題書く卑怯な民族。
日本人の職場はパワハラやセクハラ大好き。 学校はイジメが大好き。
日本人は同じ日本人やアジア人には厳しく白人には甘い情け無い民族。
日本人は中国人や朝鮮人に対する差別を正当化する。差別を正義だと思ってる。
日本人は絶対的な正義で弱者や個人を叩く。日本人は集団イジメも正当化する。
日本の芸能人は人の悪口で笑いを取る。視聴者もそれで笑う民族性。
日本人はコロナ感染者を一方的に差別し叩く。感染する奴が悪い主義の民族。
日本人は犯罪者の死刑拷問大好き。でもネットに書くだけで実行は他人任せ前提。
日本人は己の手は汚さない。
日本人は鯨やイルカを殺戮して何が悪いと開き直るが猫や犬には虐待する事すら許さない動物差別主義的民族。
日本人は「外国も同じだ」と言い訳するが文化依存症候群の日本人限定の対人恐怖症が有るので日本人だけカスな民族性なのは明らか。
世界中で日本語表記のHikikomori(引きこもり)Karoshi(過労死)Taijin kyofushoは日本人による陰湿な日本社会ならでは。
世界で日本人だけ異様に海外の反応が大好き。人の顔色を伺う媚びへつらう民族性。
世界幸福度ランキング先進国の中で日本だけダントツ最下位。欧米は上位。
もう一度言う「外国も一緒」は通用しない。日本人だけがカス。カス民族なのは日本人だけ.

陰湿な同級生、陰湿な身内、陰湿な同僚、陰湿なネットユーザー、他者を見下すのが生き甲斐の国民達。
こんなカス民族によるカス国家滅びたってどうでも良いし愛国心を持つ価値も無い。
0944NAME IS NULL
垢版 |
2021/03/27(土) 20:37:34.41ID:xBIdyDrI
カス民族日本でも世界の上位にいるんだよね
カスの日本人より
0945NAME IS NULL
垢版 |
2021/05/27(木) 22:14:23.71ID:???
なんでこんなに
いろんな仕組みが発達したのに
いまだにDBのデッドロックの回避チェックを
人間が人力でやらんといかんのだ
0946NAME IS NULL
垢版 |
2021/05/28(金) 00:25:17.31ID:???
そりゃお前のシステムがクソだからだろ
0947NAME IS NULL
垢版 |
2021/05/28(金) 00:44:50.60ID:???
SQLだけ抽出すれば簡単だろうけど
呼び出し側のコードも含めて解析するとなると面倒くさいわな

普通に設計すればデッドロックで困ることなんてないからニーズもない
0948NAME IS NULL
垢版 |
2021/05/28(金) 10:16:32.81ID:???
ある一つの商品(例えば動画とか)に現物の商品とDL商品と言うように、種類が二つないし複数ある場合

products
- id
- name
- description

product_classes
- id
- product_id
- type
- price

こんな設計でよろしいのでしょうか?
今まで1商品1レコードの単純なものしか扱った事がなかったので、こう言った場合のセオリーがわかりません
よろしければご教授下さい
0949NAME IS NULL
垢版 |
2021/05/28(金) 22:11:41.96ID:???
なんとなく想像はつくけど、設計を語るのであれば最低限ユニークキー、外部キーとかは示した方がいい。
0950NAME IS NULL
垢版 |
2021/05/29(土) 00:13:12.94ID:???
>>948
種類の軸が1つだけで固定的なら基本的にはそれでいいと思う

2つのテーブルの関係は1対多の親子関係(親が存在しないと子も存在しない)なので
product_id + typeの複合主キーにするか
id付与してproduct+id + typeはユニークかつNOT NULLにするか

あとは
商品単位で管理する項目
派生商品単位で管理する項目
現物のみ・DLのみで管理する項目
を精査してモデルを調整する

種類の軸が複数ある(複数になる確率が高そう)なら
それをモデルに取り込んでいく必要がある

classはカテゴリに近い概念に使われるのでやめたほうがいい
英語ならproduct, product_variantが定番
0951948
垢版 |
2021/05/29(土) 08:38:41.36ID:???
>>950
質問する前に調べていた所 EC-CUBEが、dtb_product, dtb_product_class と言う関係のようだったので、product_classes としましたが、正直自分も違和感があったので、product_variant採用させていただきます

主キーやユニークなども適宜設定していきたいと思います

丁寧な回答ありがとう御座いました
0952NAME IS NULL
垢版 |
2021/07/07(水) 07:18:27.74ID:???
初歩的な質問なのですが、テーブルを作成する際は以下のdata列のように数字と文字のように見た時に意味合いが違うデータは同じカラムにするべきではないでしょうか?(id=int型、data=string型)

文字列扱いの列とはいえ、センサONを1,0で表して数値型の列として扱ったほうが適切なのでしょうか?


Id | data |
--------------
1 | 120 |
--------------
2 | 55 |
--------------
3 | センサON |
0953NAME IS NULL
垢版 |
2021/07/07(水) 09:41:32.05ID:???
>>952
そのテーブルやdata列の意図・目的と
CREATE/UPDATE側・READ側でそれぞれどういう風に使うのかによる

アプリケーション全体の設定値を1テーブルに格納するようなケースで
型を揃えられないような場合は文字列で保存して読み取り側で変換する方法はそれなりに使われてる
(設定ファイルと同じ)
0954NAME IS NULL
垢版 |
2021/07/17(土) 19:18:27.33ID:???
知ってて基本は信用できないんだよなあ
Q「DB使えますか?」
できる人「(論理設計やSQLなどの基本的なレベルでは)扱えます」
できない人「(接続先情報指定したら他のことは大体やってくれるORマッパーライブラリがやってくれるから)扱えます」

これを客観的に揃えてくれるのが資格。

凄い人だなとは見られないけど、しょうもない人ではないと安心してもらえる要素として有用

経歴の説明だけで嘘八百じゃないと信じてもらえるコミュ力の人にとっては無用かもしれない
0955NAME IS NULL
垢版 |
2021/07/17(土) 19:42:59.19ID:???
イミフすぎ
何だコイツw
0956NAME IS NULL
垢版 |
2021/07/17(土) 20:20:24.66ID:???
>>954
>Q「DB使えますか?」

質問がアホなので回答もアホになる

できる人は「使えますか?」の意図や定義を確認しようとする質問で返すか
自分でそれを補完して共通認識を明確しやすい回答をする

質問の意図を確認する質問をする人は
盲目的に回答する人に比べてできる人材である確率が飛躍的に高い
0957NAME IS NULL
垢版 |
2021/07/17(土) 22:12:13.49ID:???
とある開発チームはメンバー全員がオラクルのシルバーかゴールド持ってたけど論理設計ができる人は一人もいなかった

Javaのシルバーかゴールドも全員持ってたけどオブジェクト指向的な設計がまともにできる人も一人もいなかった

一般的な資格はできる・できないの指標ではなく最低限の表面的な座学知識を持ってるかどうかの指標
0958NAME IS NULL
垢版 |
2021/07/18(日) 02:20:49.23ID:???
バカの集まり自慢して楽しいのかなw
0960NAME IS NULL
垢版 |
2021/07/18(日) 08:31:55.54ID:???
このスレでまともに論理設計できそうなやつ見たことない
0961NAME IS NULL
垢版 |
2021/07/18(日) 11:25:11.08ID:???
そもそもオラクルマスターの試験科目に論理設計なんてあるのか?
0962NAME IS NULL
垢版 |
2021/07/18(日) 13:04:22.39ID:???
オラクルマスターって資格を金で買う印象しかない
0963NAME IS NULL
垢版 |
2021/07/18(日) 14:19:58.12ID:???
試験科目はDBAとSQLやぞw
0964NAME IS NULL
垢版 |
2021/07/18(日) 14:48:22.38ID:???
Oracleに必要なのは論理設計よりインフラ側の知識じゃないのかね
広い知識は必要なことが多いけどDB屋は何でも屋じゃないからな
0965NAME IS NULL
垢版 |
2021/07/18(日) 17:35:07.35ID:???
適当な知識ででたらめ言ってるだけだろ
かわいそうなやつ
0966NAME IS NULL
垢版 |
2021/07/18(日) 18:11:25.20ID:???
使える、扱える、試験科目、インフラ側
用語の定義を軽視する人は論理設計に向かない
0967NAME IS NULL
垢版 |
2021/07/18(日) 18:12:46.43ID:???
DBの論理設計に限らず設計能力を測れるような資格は聞いたことがないな
もしあるならぜひ知りたい
0968NAME IS NULL
垢版 |
2021/07/18(日) 18:19:37.52ID:???
仕事場では姑のようにうるさい職なのに
不必要なところまで偏狭な思想を持ち込むと煙たがられるぞ
0969NAME IS NULL
垢版 |
2021/07/18(日) 19:19:52.47ID:???
要求/要件を正しく設計に落とし込む能力ならとりあえずテクニカルエンジニア(DB)でいいんじゃね?
0970NAME IS NULL
垢版 |
2021/07/18(日) 21:46:58.28ID:???
データベーススペシャリスト試験で設計能力は全く測れないよ
高度試験合格してると「お勉強よく頑張ったんですね」って評価はできる
0971NAME IS NULL
垢版 |
2021/07/18(日) 22:02:15.15ID:???
そもそも、そこで言っている「設計能力」ってどういうものを指しているんだろう。
まさかER図を奇麗に描く能力とかじゃないだろうが。
0973NAME IS NULL
垢版 |
2021/07/19(月) 08:02:57.54ID:???
>>970
設計に必要な最低限の知識を持っていることくらいはわかるだろう。
少なくともリレーションの正規化も知らないような箸にも棒にもかからないような奴は弾ける。
>>956のような面接での数回の質問よりはあてにできるんじゃないかねぇ。
0974NAME IS NULL
垢版 |
2021/07/19(月) 09:35:56.32ID:???
〇〇が測れないから資格なんて無駄!
って資格も取れない奴の捨てゼリフだろw
資格なんて>>973が言うように最低限の読み書きレベルの保証でしかない
0975NAME IS NULL
垢版 |
2021/07/30(金) 14:38:44.71ID:yprK+x+f
データベースエンジニアは高負荷になりがち
0976NAME IS NULL
垢版 |
2021/08/03(火) 06:37:39.50ID:kjdIp7nl
■■■ ほしのあすかちゃん 無茶苦茶可愛い!!! ■■■
■■■ https://imgur.com/T1UEAEJ.jpg ■■■

■■■ 星野飛鳥/ほしのあすか/星野明日香 の画像357枚!!大奉仕!!! ■■■
■■■ お宝画像リンク → ■■■ https://imgur.com/a/PYlApK1 ■■■ ← お宝画像リンク ■■■
【星野飛鳥・ほしのあすか・星野明日香】 合わせて98枚!■■■ https://imgur.com/a/l3OS8C9 ■■■
こちらも読んでください。■■■ http://archive.is/HwUrc ■■■


【あべみかこ画像集79枚大量アップ】
あべみかこファンの皆様、いつもお世話になっております。

今回はファンの皆様に大量奉仕いたします。どうぞごゆっくりとご覧くださいませ。
■■■ https://imgur.com/a/knpAYJ4 ■■■ ←でもこれで2,600ビュー以上いってるんだから人気はあるんだな。
【【【あべみかこ画像 300枚以上・保存版・大出血サービス!!】】】
■■■ https://imgur.com/a/3BzRqGD ■■■ ←でもこれで2,800ビュー以上いってるんだから人気はあるんだな。


ブルマ好きのお兄さんたち、大変お待たせしました。
ブルマ姿の女の子たち(大部分が素人)の画像を大量アップさせていただきました。
■■■ https://imgur.com/a/A3iq11Q ■■■
いやぁ、ブルマ姿の女の子って、すごくいいもんですね。
お尻に砂がついてても気にせずにはしゃぎまわる子、
ブルマから下着がはみ出ていても気づかずに元気よく走り回る子、
ブルマに下着のラインが浮き出ていても元気よく動き回る子など、
魅力的な女の子たちの画像が満載となっています。
画像の中には既出や重複がある場合があることをご了承ください。
今夜はブルマ姿の女の子たちを遅くまでごゆっくりとご鑑賞ください。

では、また!
0977NAME IS NULL
垢版 |
2021/08/28(土) 16:28:41.43ID:ufCxb7Gf
この中のどれくらいの人がIPAのデータベーススペシャリスト合格者なのかね。
0978NAME IS NULL
垢版 |
2021/08/28(土) 17:39:11.36ID:PkRMMA3g
データベーススペシャリストでも実体験がはるかに多くないと変な設計になる。
0979NAME IS NULL
垢版 |
2021/08/28(土) 17:53:44.11ID:???
ちゃんとした知識を身に着けないで見よう見まねで実務経験を積んできたようなのの方が
考え方が偏った変な設計になっている気がする。
0980NAME IS NULL
垢版 |
2021/08/28(土) 18:17:32.02ID:PkRMMA3g
それは偏見。いろんな設計を見ていきてないやつだと確かにそうなるが。
0981NAME IS NULL
垢版 |
2021/08/28(土) 18:29:16.56ID:???
だからそのいろんな設計に対応できる知識や能力を問うのが試験であって、そのための勉強をするわけだが。
実務でたまたま出会える設計なんて限られたものだろう。
0982NAME IS NULL
垢版 |
2021/08/28(土) 18:47:15.12ID:ufCxb7Gf
合否は別として、レスを拝見するに真っ当な見識をお持ちの方が多そう。
0983NAME IS NULL
垢版 |
2021/08/28(土) 18:47:51.18ID:???
門前の小僧 習わぬシステムを設計する
0984NAME IS NULL
垢版 |
2021/08/28(土) 19:23:25.68ID:P8TnL8ql
エンジニアでは無いながら、この度スペシャリスト試験受けることになり、勉強する内にデータベースの魅力に気付いてしまった。そして、とうとうプロの巣窟であるこのスレに辿り着いたというわけさ。
0985NAME IS NULL
垢版 |
2021/08/28(土) 20:11:55.56ID:???
>>981
>いろんな設計に対応できる知識や能力を問うのが試験

なんてものが存在すればいいんだけどね
少なくともデータベーススペシャリストの試験ではそんなものは問われない
0987NAME IS NULL
垢版 |
2021/08/28(土) 21:07:54.26ID:???
>>986
そこに書いてる内容が全て試験で問われるわけじゃないんだよ
実務を知らないのかそれとも試験内容を知らないのか
0988NAME IS NULL
垢版 |
2021/08/28(土) 21:16:51.62ID:???
正規化が設計だと思ってるやついるからな

設計能力を問う試験 == 「これは第何正規形か?」
0989NAME IS NULL
垢版 |
2021/08/28(土) 21:25:12.13ID:PkRMMA3g
実務では制約をガチガチに付けてデータが入らないようにして、それは私の仕事ではありませんと言い、自分の仕事を減らすクソがいるからな。

データベーススペシャリストやオラクルマスターの一部はこうなりやすい。
0990NAME IS NULL
垢版 |
2021/08/28(土) 21:41:20.39ID:???
>データベーススペシャリストやオラクルマスターの一部はこうなりやすい。

相当なルサンチマンがあるようでw
0991NAME IS NULL
垢版 |
2021/08/28(土) 22:05:41.57ID:P8TnL8ql
物理設計は実務やってないと感覚的に理解するの難しいのだろうか。。
0993NAME IS NULL
垢版 |
2021/08/28(土) 22:12:15.87ID:P8TnL8ql
新スレ保守お願いします
0994NAME IS NULL
垢版 |
2021/08/28(土) 22:17:42.12ID:PkRMMA3g
>>990
データベース板でそう主張するやつがいるんだよ!
0995NAME IS NULL
垢版 |
2021/08/28(土) 22:41:54.46ID:???
>>991
物理設計はベンダー資格はある程度役に立つ
論理設計は資格試験は全くといっていいほど役に立たない
0996NAME IS NULL
垢版 |
2021/08/29(日) 11:32:43.63ID:ns1fXrgZ
>>995
なるほど。。当方は非エンジニアなんだけども今後、データベース領域の人達と交じるにあたり、データベーススペシャリスト受けようと思ってるのよね。上で誰かも言っていたし、他の多くの試験と同様、最低限の共通言語を持っていると捉えてくれるだろうと期待して。
0997NAME IS NULL
垢版 |
2021/08/29(日) 11:34:54.60ID:ns1fXrgZ
相手の知識量を見積もりながら会話するの非効率だろうから。。
0998NAME IS NULL
垢版 |
2021/08/29(日) 11:35:16.40ID:ns1fXrgZ
さて埋めるか
0999NAME IS NULL
垢版 |
2021/08/29(日) 11:36:05.25ID:ns1fXrgZ
試験通ってデータベーススペシャルになるんや!(´・ω・`)
1000NAME IS NULL
垢版 |
2021/08/29(日) 11:36:36.96ID:ns1fXrgZ
毎日がスペシャリスト(´・ω・`)
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 1559日 18時間 58分 6秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。

ニューススポーツなんでも実況