2ちゃんねる ■掲示板に戻る■ 全部 1- 最新50    

DB設計を語るスレ 11

1 :NAME IS NULL:2021/08/28(土) 22:08:57.33 ID:P8TnL8ql.net
語れ

前スレ
DB設計を語るスレ 10
https://mevius.5ch.net/test/read.cgi/db/1495438711/

2 :NAME IS NULL:2021/08/28(土) 22:10:23.69 ID:P8TnL8ql.net
SQL楽しい。

3 :NAME IS NULL:2021/08/28(土) 22:10:54.49 ID:P8TnL8ql.net
10月10日の試験、合格できるだろうか。。

4 :NAME IS NULL:2021/08/28(土) 22:11:22.77 ID:P8TnL8ql.net
4年ぶりの新スレ。

5 :NAME IS NULL:2021/08/28(土) 22:11:39.15 ID:P8TnL8ql.net
どこまで保守すれば良いかわからぬ

6 :NAME IS NULL:2021/08/28(土) 22:11:55.37 ID:P8TnL8ql.net
誰か教えてくれ

7 :NAME IS NULL:2021/08/28(土) 22:13:12.80 ID:P8TnL8ql.net
ミックの本読んで勉強中

8 :NAME IS NULL:2021/08/28(土) 22:14:23.02 ID:P8TnL8ql.net
一応、10までやるわ

9 :NAME IS NULL:2021/08/28(土) 22:16:09.82 ID:P8TnL8ql.net
having句と自己結合使ってメジアン求める式が難解

10 :NAME IS NULL:2021/08/28(土) 22:16:28.93 ID:P8TnL8ql.net
辛いのう

11 :NAME IS NULL:2021/08/28(土) 22:27:49.72 ID:???.net
乙。

12 :NAME IS NULL:2021/08/28(土) 22:36:16.29 ID:???.net
保守とかもうやらなくてもよくなったんじゃ?

13 :NAME IS NULL:2021/08/29(日) 00:57:57.90 ID:???.net
保守要らんのか。。

14 :NAME IS NULL:2021/08/29(日) 01:04:47.43 ID:vESMB477.net
データベース板は十数年前のスレッドが生きているくらいだからな。

ギャンブル系の板はすぐにスレッドが消える。

15 :NAME IS NULL:2021/08/29(日) 01:06:18.37 ID:vESMB477.net
いまちょっとだけ確認したら、18年前に立てられた過疎スレがあった。

16 :NAME IS NULL:2021/08/29(日) 02:48:49.84 ID:???.net
本当だ、2003か。俺が大学2年の時だわ。時が経つのは早いなぁ

17 :NAME IS NULL:2021/08/29(日) 06:59:30.61 ID:???.net
ちょっと見ただけだけどここが一番古かった
もう数ヶ月で20年、歴史を感じるわ

1 MASM 01/12/16 01:40
XOR AX, AX

8086アセンブラで会話しよう。
https://matsuri.5ch.net/test/read.cgi/i4004/1008434418/

18 :NAME IS NULL:2021/08/29(日) 11:39:07.46 ID:ns1fXrgZ.net
スレのライフタイムが1559日とか感慨深いわ。部署異動したばかりの頃だったな。あの時は若かった

19 :NAME IS NULL:2021/08/29(日) 11:40:31.12 ID:ns1fXrgZ.net
>>17
20年前とか、別人だよな。いまや、太って髪が薄くなったオッサン。

20 :NAME IS NULL:2021/08/30(月) 22:17:32.42 ID:umkyPM8I.net
過疎過ぎだな。

21 :NAME IS NULL:2021/08/30(月) 22:18:31.51 ID:umkyPM8I.net
データベーススペシャリスト試験前なので、先輩方有益な知識くらさい。。

22 :NAME IS NULL:2021/08/30(月) 22:24:36.12 ID:KytOSBee.net
>>21
デブ女を抱くと合格します。

23 :選挙に行こう:2021/09/04(土) 00:48:23.35 ID:???.net
ソ連の核は綺麗な核
ポル・ポトはアジア的優しさ
北朝鮮は地上の楽園
珊瑚自作自演事件
南京・慰安婦捏造
教科書書き換え「誤報」事件
朝日・武富士裏献金事件
拉致問題切り捨て
サイレント魔女リティ
風の息遣い
五味ボマー
変態新聞
村木局長犯人扱い
その他人民裁判ならぬマスコミ裁判は数知れず
そしてマスコミお得意の「報道しない自由」

これでも貴方は新聞を信用しますか
これでも貴方は新聞を購読しますか

よく考えて下さい

24 :NAME IS NULL:2021/09/04(土) 01:43:35.61 ID:???.net
サンケイ記者って朝日に採用されなかった奴がなるって本当?

25 :NAME IS NULL:2021/09/04(土) 02:24:29.84 ID:3tayR9G7.net
>>24
三流新聞だからね。フジサンケイグループはネトウヨから左翼だと攻撃されて、ネトウヨ寄りになったヘタレ。

26 :NAME IS NULL:2021/09/04(土) 12:47:40.08 ID:???.net
親会社はフジテレビ

27 :NAME IS NULL:2021/09/12(日) 18:36:04.79 ID:xQ4OhZ56.net
スペシャリスト試験1ヶ月切って胃が上がってきたっす( ´Д`)y━・~~

28 :NAME IS NULL:2021/09/23(木) 05:13:50.03 ID:uj7rDnPQ.net
あと18日。午後2は何とか仕上げられるかな

29 :NAME IS NULL:2021/09/23(木) 20:20:47.04 ID:KxDKEqBY.net
疲れた。試験受からぬかもしれぬ(´・ω・`)

30 :NAME IS NULL:2021/10/13(水) 12:35:54.41 ID:???.net
落ちたか?

31 :NAME IS NULL:2021/10/17(日) 09:57:42.62 ID:???.net
>>30
落ちたわ(´・ω・`)

32 :NAME IS NULL:2021/10/18(月) 10:23:59.29 ID:???.net
そっか、次がんばれ。

33 :NAME IS NULL:2021/12/10(金) 09:54:04.29 ID:h7CMVbmD.net
ブログとか文章を書いていると自動的に下書きされる仕組みがあれます。
あれって、同じテーブルに下書き用のフラグをつけてるのでしょうか?
それとも下書き用のテーブルを用意しているのでしょうか?

34 :NAME IS NULL:2021/12/10(金) 11:10:10.21 ID:???.net
それはWebシステム側の仕組みだから
DBはそれに応じて対応する

35 :NAME IS NULL:2021/12/10(金) 15:27:30.67 ID:h7CMVbmD.net
>>34
Webシステム側の仕組みとしても、下書き用のデータを保存する必要がありますよね?
その保存に関するDB設計を訪ねているのですが・・・

36 :NAME IS NULL:2021/12/10(金) 15:30:14.07 ID:???.net
>>33
下書き用テーブルに何か意味があるなら使ってみたら

37 :NAME IS NULL:2021/12/10(金) 15:44:42.40 ID:0njbUPaS.net
そんなん設計方針によるだろ
お行儀よくいくならテーブル分けたほうがいいけど、実態としては同じテーブルのことが多いんじゃない
published_at的なカラムがnot null &過去なら後悔っていうロジックにするんじゃね

38 :NAME IS NULL:2021/12/10(金) 15:45:36.70 ID:???.net
ブログの更新をどのような手順で行うのか
下書きの保持期間はどのくらいなのか
そのセッションで破棄するのか、数日間保持するのか
公開ページは、公開後に更新しないのか
更新や修正の履歴は残すのか
など、色々あるから

39 :NAME IS NULL:2021/12/10(金) 16:51:08.87 ID:???.net
WordPressは同一テーブルに保存する
だから無駄なレコードが増えまくる

40 :NAME IS NULL:2021/12/10(金) 17:26:21.34 ID:???.net
公開済み記事を中途半端に編集して一旦下書き保存とか
バージョン管理が必要なら別テーブルのほうがスッキリする

編集中の新バージョンの記事から旧バージョンの記事へのリンクをもたせて
バージョン管理することもできなくはないが諸々の処理が非効率になる

41 :NAME IS NULL:2021/12/11(土) 11:03:18.19 ID:???.net
システム側の問題だけど、自動保存は後始末が気になるな
どうしても余計なログが溜まっていくわけだし
cronなんかでわざわざ期限指定削除するのもあれだし

42 :NAME IS NULL:2021/12/11(土) 14:32:09.42 ID:???.net
後始末も要件次第
いろいろやり方はある

>>38が書いてるのと同じことだけど
DB設計はきちんと要件を決めることからやらないと

43 :NAME IS NULL:2021/12/11(土) 18:22:10.80 ID:???.net
要件次第っていい出したら議論の放棄にしか見えんな

「俺はAだ。だけどBもある。その他いろいろ」
って見解ならわからんでもないが

44 :NAME IS NULL:2021/12/11(土) 18:39:12.30 ID:???.net
「フラグをつける場合もあるし、下書き用のテーブルを用意する場合もある」

こう回答すると質問者の意に適うんだろうか
それなら聞かなくても良かったにならないか?

45 :NAME IS NULL:2021/12/11(土) 19:19:59.77 ID:???.net
それって単に相手の言葉を引用してるだけじゃん
それなら答えなくても良かったにならないか?

46 :NAME IS NULL:2021/12/11(土) 19:23:13.31 ID:Q+pUaU76.net
データモデルを本当のプロに任せないプロジェクトが多すぎるんだよなあ。

47 :NAME IS NULL:2021/12/11(土) 19:25:42.35 ID:???.net
「牛丼食べたいがどうしたらいい?」
って質問してるやつに、予算や場所や味の好みを聞くようなもんだな

普通に吉野家、松屋、自分で作る、コンビニで買う、冷凍食品を使う
など、それぞれが思うことを言えばいいだけなのに

48 :NAME IS NULL:2021/12/11(土) 20:08:28.64 ID:???.net
>>45
与えられた条件だとそういう回答しか返せないって事だろ
それぐらい理解しなよ

>>47
そういう奴に吉野家って言うと味がどうのとか言い出すから

49 :NAME IS NULL:2021/12/11(土) 22:18:44.16 ID:???.net
>>43
要件次第ってのは往々にして「もうちょっと考えろや」の婉曲表現なんだよ
どういう点を考えなきゃいけないかもわからないようならそれを質問しろ

流れを見る限りかなり親切なほうだと思うぞ

50 :NAME IS NULL:2021/12/11(土) 22:40:49.50 ID:???.net
>「牛丼食べたいがどうしたらいい?」
>って質問してるやつに、予算や場所や味の好みを聞くようなもんだな

要件っていう言葉の意味を理解してないなw

牛丼食べたいなら食べればいいじゃん
なんでそんなことわざわざ聞くの?
どうしたらいいかなんでわからないの?

51 :NAME IS NULL:2021/12/12(日) 00:05:34.74 ID:???.net
そこを聞くのがSIerだろう

52 :NAME IS NULL:2021/12/12(日) 01:35:28.32 ID:???.net
要件を明確にしないやつにろくなやつがいないから防御本能が働くのかもな

53 :NAME IS NULL:2021/12/12(日) 23:47:20.93 ID:???.net
ここで回答してるのはSIerが業務でやってるわけじゃない
質問者は客じゃない

まともな回答がほしいなら要件は質問者がまとめて提示すべきで、要件次第って言われてるってことは
それだけじゃ答えようがないからもうちょっと詳しく条件書けってことだ

54 :NAME IS NULL:2022/01/08(土) 12:19:00.62 ID:hBrjjHmk.net
お前ら和歌山県出身の下村拓郎様(35歳、元自衛隊)をご存知か、この方は将来素晴しい人物になるから覚えておいて損はないぞ

55 :NAME IS NULL:2022/01/08(土) 20:30:13.82 ID:l94tCt7+.net
n;nのデータベースを作りたいです。
具体的にはパソコン部品と症状です。
簡単なケースとして
 フリーズする→CPU
 再起動する→CPU
みたいなデータです。
該当パーツを選ぶと関係する症状が出てくる。症状を選ぶと該当するパーツが出てくるという感じです
出来ればwebサイトにて構築したいのです。
難しければEXCELで。
ACCESSだとライセンスの問題が出てきてしまうのでACCESSは最後の最後の手段で
こんなサイトで作れるよとか
こんなソフトあるよ等アドバイスいただければ幸いです。
よろしくお願いしますm(__)m

56 :NAME IS NULL:2022/01/09(日) 05:39:32.50 ID:2+VaCmDS.net
>>55
Excelでパソコン部品と対応する症状の列を作って、存在する全ての組み合わせ入れてからフィルターかければいいんじゃね?

使う場所や目的がわからないけどさ

57 :NAME IS NULL:2022/01/09(日) 11:21:16.40 ID:???.net
>>55
データベースならどんなやつでも作れるよ
設計スレなので設計の話をするとパーツ、症状、パーツと症状の組み合わせ、の3つのテーブルを作ればいいだけ

ちなみに「フリーズする」とか「再起動する」症状の原因はドライバだったり
アプリケーションだったりパーツとは関係ないことが大半
なので手間かけてWebサイト作るよりもまずはExcelでまとめたほうがよさそう

58 :NAME IS NULL:2022/01/09(日) 11:26:01.77 ID:???.net
何か部品と症状をタブ区切りにしてgrepやawk使って出来そうな気がする

59 :NAME IS NULL:2022/01/09(日) 22:53:18.78 ID:EooB3qgr.net
>>56-58
ありがとうございます。
一番手軽なのは56番さんのやり方ですね
57番さんの言う通りソフト要因は当然ありますね
56&57番さん
手軽にアプリケーション不要で誰でもどこからでも参照、検索出来るようにしたいと思い
webアプリケーション?web上に構築したくて質問させていただきました。
とりあえずEXCELでデータ入力してどこかに構築出来そうなアテが出来たら移行してみたいと思います。
ありがとうございましたm(__)m

60 :NAME IS NULL:2022/02/18(金) 23:12:05.70 ID:bnx9nLc6.net
プロフィールなどの設計で画像カラムが必要な場合、
1つの画像ならプロフィールテーブルに1つあれば十分ですが、
複数画像なら別テーブルにしますよね?
その際、「一覧に表示する画像(サムネイル)」はどうやって決めるのでしょうか?
画像テーブルにフラグでもつけるのでしょうか?

61 :NAME IS NULL:2022/02/18(金) 23:17:35.30 ID:???.net
DB設計として

■プロフィールテーブル
ID|名前
■画像テーブル
ID|プロフィールID|ファイル名|フラグ

としたら、
SELECT * FROM プロフィール INNER JOIN 画像 ON プロフィール.ID=画像.プロフィールID WHERE フラグ=1

みたいな感じで絞り込めば良さそうな気はしますが

62 :NAME IS NULL:2022/02/19(土) 02:04:25.88 ID:???.net
とりあえずはそれでもいいのかもしれないが実際設計するなら
プロフィールと画像の関係/ビジネスルール、画像データの使い方(CRUD)、データ件数、要求性能なんかをまず明らかにしてから考える

例えば
プロフィール1個につき必ず1つサムネイル用の画像が必要か?
一覧に表示する画像はプロフィール1個につき1つだけか?

63 :NAME IS NULL:2022/02/19(土) 08:06:38.62 ID:???.net
>>62
なるほど。要件が増えるにつれてテーブル設計も変わってくるわけですね。
ただ、画像テーブルをわけることである程度は対応できそうです。
>>61の設計ならサムネイル用の画像が複数になっても
「サムネイル」というカラムにチェックが入ればいい形にできるし、
一覧に表示する画像が増えても同様かと。

画像ってつい1つのテーブルにまとめがちですが、
「画像01、画像02・・・」みたいなカラムで対応しているアプリも多いので、
もっと深く要件を追求して考えなければけませんね

64 :NAME IS NULL:2022/02/19(土) 13:07:07.13 ID:???.net
>なるほど。要件が増えるにつれてテーブル設計も変わってくるわけですね。
要件が増えたわけではなく>>62に書いてるのは最初の設計段階で明らかにしておくべきこと

プロフィール1つに対して複数の画像を紐付けたい場合
プロフィールと画像でテーブルを分けるのはRDBの場合は当たり前
その2つのテーブルをどういう設計にするかは要件次第

性能目的で1テーブルに非正規化する場合が全くないわけではないがかなり特殊なケース
そういう場合でも普通は正規化した構造を先に考える

65 :NAME IS NULL:2022/02/19(土) 13:51:18.95 ID:???.net
>>60
> その際、「一覧に表示する画像(サムネイル)」はどうやって決めるのでしょうか?
それを決めるのが要件定義

> 画像テーブルにフラグでもつけるのでしょうか?
それは実装だから要件が決まったらまたおいで

66 :NAME IS NULL:2022/02/23(水) 14:56:20.38 ID:???.net
要件によっていろんな形の設計がありうるから
こういうのはDB設計力を高めるには結構いいお題

67 :NAME IS NULL:2022/02/24(木) 11:01:46.54 ID:???.net
>>60
タイムスタンプ

68 :NAME IS NULL:2022/03/02(水) 00:21:11.73 ID:???.net
HeidiSQLの作者があっさりMaterializedView非対応だとのべて逃げてしまった
5年前
そんなばかな

ひょっとしてMaterializedViewってアンチパターンなのか?

69 :NAME IS NULL:2022/03/17(木) 06:57:42.06 ID:???.net
恥ずかしい話なんだが20年くらいPGやっててDB設計やSQLが苦手でいつもできるやつにまかせてたんだけどやっぱ一から勉強しないとダメだなって思ってるんだけど最低限これできれば恥かかないよってのあったら色々おせーてください

70 :NAME IS NULL:2022/03/17(木) 17:04:05.20 ID:???.net
SQL
レベル1: データの作成/更新/抽出やテーブル/ビュー/インデックスの作成/変更ができるようになる
レベル2: 実行プランが読めるようになる
レベル3: クエリのチューニングができるようになる

レベル1はその辺のドリル形式とかの入門書で比較的すぐに身につく

レベル2はRDBのアーキテクチャ理解が必須なので教科書的な本かベンダー資格で勉強するといいと思う
教科書的な本はこういうやつ。DB設計の基礎とも重なる部分
https://www.ohmsha.co.jp/book/9784274225161/

レベル3は実践 + チューニングに特化した本とかで知識を増やせばいいと思う
↓このサイトの内容やこの人が書いてる本はオススメ
https://use-the-index-luke.com/

DB設計は上でいうSQLのレベル2になってからはじめればいい

71 :NAME IS NULL:2022/03/17(木) 18:18:52.56 ID:???.net
20年PGやってれば、自分でみてよい設計か悪い設計か判断つくだろうに

>>70
つか歴20年でさすがにレベル1もクリアしてなければ恥ずかしいとかいうレベルじゃないぞw

72 :NAME IS NULL:2022/03/17(木) 18:24:00.02 ID:???.net
>いつもできるやつにまかせてた

相当えらい人なんではないかな?

73 :NAME IS NULL:2022/03/17(木) 19:43:06.27 ID:???.net
てか、そのできる奴とやらにどういう処理なのか聞けば良くね?

74 :NAME IS NULL:2022/03/17(木) 21:16:26.49 ID:???.net
>>71
SQLが苦手という人はだいたいレベル1が満足にできないもんよ
ちなみにSQLが得意とアピールする人も大半はレベル1の人なので要注意

プログラマー歴10年以上でも実行プランはコストだけ見る人とか
インデックス使ってそうかどうかくらいしか分からない人のほうが多い
その辺を見るのにベンダー資格はある程度役に立つ

75 :NAME IS NULL:2022/03/18(金) 10:35:46.15 ID:???.net
得意なんて言葉使ってる人はこれに限らず普通のレベルでしょ(人並程度ですとかわらん)

76 :NAME IS NULL:2022/03/18(金) 11:57:45.97 ID:???.net
>>75
君は日本語能力が普通のレベルに達してないね

77 :NAME IS NULL:2022/03/20(日) 15:03:20.97 ID:???.net
調べれば調べるほどわからんことが出てきていつになっても得意なんて言えない

78 :NAME IS NULL:2022/03/21(月) 00:06:16.03 ID:???.net
「あなたの得意な技術は何ですか?」
「調べれば調べるほどわからんことが出てきていつになっても得意なんて言えないです」
「。。。。。(ハイ、不採用っと)」

79 :NAME IS NULL:2022/03/21(月) 03:13:56.04 ID:???.net
流石にそんな馬鹿正直には言わんよw

80 :NAME IS NULL:2022/03/22(火) 01:33:40.94 ID:3HuGVN9a.net
>>78
面接官は阿呆だから、個人差を軽視するんだよなあ。

なぜか特定のことしかできない人間をその道のプロだと思い込んでしまう。

81 :NAME IS NULL:2022/03/22(火) 02:07:42.35 ID:???.net
君が阿呆な面接官しか見たことないのはなぜか考えようねw

82 :NAME IS NULL:2022/03/22(火) 11:16:01.61 ID:???.net
良い質問だ、今度面接に来た奴に出してみる

83 :NAME IS NULL:2022/09/08(木) 13:38:01.86 ID:/QbvZDF4.net
Yは4

84 :NAME IS NULL:2022/09/10(土) 10:00:03.75 ID:6PvLNR0d.net
面接官が理解できる範疇で答えないとダメなのは確かなこと。

85 :NAME IS NULL:2023/03/23(木) 12:43:47.04 ID:???.net
DB設計の初歩について教えてください。
ECサイトのproductsテーブルの設計で以下の様なデータがあった場合には、後述するテーブルの様に正規化するのが正しいでしょうか?
|id|商品名 |型番|色|容量|
|id|iPhone14 Pro Max| MQ993J/A| Deep Purple |128GB|
|id|iPhone14 Pro Max| MQ9E3J/A| Deep Purple |256GB|
|id|iPhone14 Pro Max| MQ983J/A| Gold |128GB|
|id|iPhone14 Pro Max| MQ9D3J/A| Gold |256GB|
|id|iPhone14 Pro Max| MQ973J/A| Silver |128GB|
|id|iPhone14 Pro Max| MQ9C3J/A| Silver |256GB|
|id|iPhone14 Pro Max| MQ963J/A| Space Black |128GB|
|id|iPhone14 Pro Max| MQ9A3J/A| Space Black |256GB|
|id|iPhone14 Pro |MQ0F3J/A| Deep Purple |128GB|
|id|iPhone14 Pro |MQ173J/A| Deep Purple |256GB|
|id|iPhone14 Pro |MQ073J/A| Gold |128GB|
|id|iPhone14 Pro |MQ173J/A| Gold |256GB|
|id|iPhone14 Pro |MQ013J/A| Silver |128GB|
|id|iPhone14 Pro |MQ0Y3J/A| Silver |256GB|
|id|iPhone14 |MR3Q3J/A| Yellow |128GB|
|id|iPhone14 |MR3R3J/A| Yellow |256GB|
|id|iPhone14 |MPVJ3J/A| Blue |128GB|
|id|iPhone14 |MPWN3J/A| Blue |256GB|
|id|iPhone14 |MPUD3J/A| Midnight |128GB|
|id|iPhone14 |MPVW3J/A| Midnight |256GB|
|id|iPhone14 |MPWV3J/A| Midnight |512GB|

商品テーブル
id 商品名
1 iPhone14 Pro Max
2 iPhone14 Pro
3 iPhone14

色テーブル
id 色
1 Deep Purple
2 Gold
3 Silver
4 Space Black
5 Yellow
..more

容量テーブル
id 容量
1 64GB
2 128GB
3 256GB
4 512GB
5 1TB

商品詳細テーブル
id 商品ID 型番 色ID 容量ID
1 1 MQ993J/A 1 2
2 1 MQ9E3J/A 1 3
3 1 MQ9J3J/A 1 4
4 1 MQ9N3J/A 1 5
5 1 MQ983J/A 2 2
6 1 MQ9D3J/A 2 3
7 1 MQ9H3J/A 2 4
8 1 MQ9M3J/A 2 5
.....more

86 :NAME IS NULL:2023/03/23(木) 21:46:48.18 ID:???.net
よくwからないならとりあえず第三正規形にしとけ、というのはよく言われる話。
とはいえ正しく正規化をするにはそれなりの知識は必要だな。
>>85を見る限り正規化とは関係ないテーブル分割も混じっているし。

87 :NAME IS NULL:2023/03/24(金) 16:22:52.88 ID:???.net
>>85
商品詳細テーブルの型番がユニークでIDと型番が1対1であれば
一応は第三正規形とみなせるので正規化の練習問題なら概ねいいと思う
実戦なら検索と更新の方法や扱う商品の種類など様々な状況に依存するから単純な正解はない

88 :NAME IS NULL:2023/03/24(金) 16:24:28.93 ID:???.net
ECサイトで商品管理の一番中心となる商品マスタは「商品詳細テーブル」にあたるもので
このテーブルで自社が管理する商品番号から特定の商品を一意に特定できるようにする

でも「商品詳細テーブル」という命名とカラムの並べ方からそういう認識ではなさそうに見えたのが少し気になったところ

89 :NAME IS NULL:2023/03/24(金) 16:43:27.62 ID:???.net
商品詳細テーブルが何か違うと思う
idはともあれ、商品IDが1固定というのは変

90 :NAME IS NULL:2023/03/24(金) 18:35:45.73 ID:???.net
>>85
商品詳細テーブルに書いてる例が全部iPhone14 Pro Maxだから1

91 :NAME IS NULL:2023/03/24(金) 19:33:46.97 ID:???.net
>>85
キーや関数従属性の正確なところがわからないと確実ではないが
たぶん分割前のproductsテーブルのままでも第三正規形。
その分割自体は正規化とは直接関係ない。

92 :NAME IS NULL:2023/03/24(金) 23:09:43.98 ID:???.net
確かに言われてみれば最初のテーブルが全カラムをカバーできてるということなら第三正規形と言えそうだね

現実には機種や色は書いてる以外の属性が入ってくるだろうから第三正規形でも分割が必要かもしれないのと
色や容量は機種によって取りうる組み合わせに制約があるから第五正規形までを考えるとその組み合わせが表現できるテーブルを作ることになる

93 :NAME IS NULL:2023/03/24(金) 23:25:50.90 ID:???.net
>現実には機種や色は書いてる以外の属性が入ってくるだろうから第三正規形でも分割が必要かもしれないのと

そういうのを正規化で分割し終わった結果があのテーブルかもよ

94 :NAME IS NULL:2023/03/25(土) 01:17:58.97 ID:???.net
>>93
Deep PurpleとかをFKの値として使ってるってこと?
それは試験問題でしかありえなくない?

95 :NAME IS NULL:2023/03/25(土) 09:32:28.88 ID:???.net
>>94
色に従属する他の属性があるなら別テーブルにするだろうし必要に応じてFKを設定することもあるだろう。
文字列のキーが現実的じゃないってことかな?どちらにしても正規化とは別の話だと思うが。

96 :NAME IS NULL:2023/03/27(月) 05:13:43.88 ID:heX8rl2o.net
基本的な SQL 文法をある程度理解して、小さいアプリを作ってるレベルなんですが、
そこそこ大規模な DB も設計してみたいのです。
設計の参考にしたいので、テーブル設計を公開している Web サービスがあれば教えて頂けないでしょうか?

97 :NAME IS NULL:2023/03/27(月) 11:10:45.81 ID:???.net
StackOverflowとかWebサービスではないけどRedmineとかは参考になると思う
和製ならEC-CUBEとかもDBスキーマ見れる
ただしかなり微妙

98 :NAME IS NULL:2023/03/28(火) 06:46:47.78 ID:jxesX9VZ.net
>>96
古本でいろんなものが安く手に入る。
出版はかなり前のものだが、いまだに売れ続けている。

ネットよりももっと専門家が書いている一般書籍の方が信頼できる。

99 :NAME IS NULL:2023/03/28(火) 10:34:51.77 ID:???.net
>>97
>和製ならEC-CUBEとかもDBスキーマ見れる
EC-CUBEを見ればこの程度でもいいのかという自信がつくw

100 :NAME IS NULL:2023/03/28(火) 19:13:03.36 ID:jxesX9VZ.net
翔泳社のデータベースマガジンを書籍化したものなど、古い本だがいまでも考え方はかわらない。

101 :NAME IS NULL:2023/03/28(火) 22:36:51.48 ID:???.net
グラス片手にみたいなやつかw
あれは読んで損はないけど設計未経験者向けの教科書的内容だから
ああいうのベースでそのまま大規模の設計とかしたらクビ飛ぶぞ

102 :NAME IS NULL:2023/03/28(火) 22:56:04.50 ID:jxesX9VZ.net
>>101
それじゃない。

とにかくいろんな人間が書いた過去の本を読めばいい。

実務経験のない講師やら、実務経験の少ない人間が書いたやつはダメだ。

しかし、そういうダメな教科書的なことしか言わない人間の本を読むのも重要。

何がどうダメなのかを理解していないとな。

103 :NAME IS NULL:2023/03/28(火) 22:58:35.34 ID:jxesX9VZ.net
>>101
翔泳社だけでも「データベース」で検索すれば、データモデリング関連の本はたくさん出てくる。

https://www.shoeisha.co.jp/search?search=%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9&p=4

104 :NAME IS NULL:2023/03/28(火) 23:01:53.85 ID:jxesX9VZ.net
翔泳社で「データモデリング」で検索するとこんな出てくる。

https://www.shoeisha.co.jp/search?search=%E3%83%87%E3%83%BC%E3%82%BF%E3%83%A2%E3%83%87%E3%83%AA%E3%83%B3%E3%82%B0

俺はこの中の本の数冊は昔から持っている。

105 :NAME IS NULL:2023/03/28(火) 23:03:59.08 ID:jxesX9VZ.net
「実践的データモデリング入門」は書かれた時代が違うから、高い有料のモデリングツールを使う説明になっている部分があるが、内容は悪くないうえにモデリングツールを単にいまの主流に読み替えればいいだけ。

106 :NAME IS NULL:2023/03/28(火) 23:05:52.90 ID:jxesX9VZ.net
単に古い本というだけで排除してしまう無能、キータでも読んでいればよい

実践的データモデリング入門 (DB Magazine SELECTION) https://amzn.asia/d/2MXR5YU

107 :NAME IS NULL:2023/03/29(水) 12:09:18.98 ID:???.net
急に一人で会話はじめてマジキモいな

108 :NAME IS NULL:2023/03/29(水) 13:31:43.26 ID:???.net
ここには君一人しかいない

109 :NAME IS NULL:2023/03/31(金) 19:50:21.66 ID:pblyzaz3.net
>>107
それ日本人独特の日本人はみんな同じという変な考え方

外国では自分と他人はやること、なすことをが違うので、気持ち悪いなどとは言わないし、何も思わない。

この業界にいるなら、少しは日本人に寄せない外国人とやっているはずだ。
もしそういう外国人を知らないなら、この業界はきついぞ。

110 :NAME IS NULL:2023/04/07(金) 22:12:13.79 ID:???.net
まるで求人担当の人みたいな物言い

111 :NAME IS NULL:2023/04/11(火) 20:07:58.35 ID:+S9P9M6L.net
日本にいる外国人と仕事をしたことねえんだろうな。
何もかも違うことをして、言い争いになって、最後は完成していないがお金をよこせと言う。

112 :NAME IS NULL:2023/04/11(火) 20:44:35.40 ID:???.net
完成までの残り作業はお前が頑張れ

113 :NAME IS NULL:2023/04/11(火) 22:50:41.17 ID:+S9P9M6L.net
>>112
外国人に来てもらっても、さらにひどくなるだけ。日本人を教育した方がはるかによい。

114 :-:2023/04/13(木) 01:51:22.60 ID:bc2hwxFd.net
以下のサンプルのような正規化前のCSVを正規化されたDBに
振り分けるようにインポートするのは可能でしょうか?
(事前に部署テーブルにデータは定義されている前提です。)

## CSV
id, name, division
1, 佐藤, 営業
2, 鈴木, 営業
3, 高橋, 経理
4, 田中, 人事

## DB
### 社員テーブル
id, name, division_id
1, 佐藤, 1
2, 鈴木, 1
3, 高橋, 2
4, 田中, 3

### 部署テーブル
id, division_name
1, 営業
2, 経理
3, 人事

115 :NAME IS NULL:2023/04/13(木) 03:54:31.92 ID:???.net
>>114
設計とは関係ないような・・・
CSVを一時テーブルに取り込んでからSELECT INTOがおすすめ

116 :NAME IS NULL:2023/04/14(金) 02:02:43.38 ID:+wdNjIQU.net
>>114
CSVのデータが想定外だった場合の考慮がなさすぎる。

プログラムでゴリゴリやりたいなら、やればいいと思うが、元データをいきなり加工してしまうのは、システムの設計としては、どの段階でおかしかったのか、わからない手順になるので完成によくない設計思想。

117 :NAME IS NULL:2023/04/14(金) 10:05:17.25 ID:???.net
書かれてないことを指摘するのは良いが、
>(事前に部署テーブルにデータは定義されている前提です。)
と言っている以上、それを尊重した方が良い

118 :NAME IS NULL:2023/04/14(金) 15:09:55.69 ID:???.net
>>117
言いたいことはよくわかるんだけどその前提を書いた意図は
部署テーブルも生成しながらインポートしたいわけではないということを伝えたかっただけで
部署テーブルに存在しない部署名がCSVには絶対出てこないという意味ではないと思うよ

部署名だけでなくidの問題なんかもあるから>>116の1行目の指摘はまあ普通
ただ元データを加工するわけではないし
振り分けながらインポートしてもどの段階でおかしくなったのかも普通にわかるので
後半の指摘はいつも通り的外れだなと思う

119 :NAME IS NULL:2023/04/14(金) 15:18:13.52 ID:???.net
>>114のような処理内容ならSSISとかのETLツール使えば
GUI操作だけでエラーハンドリングなんかも含めて簡単にバッチ処理が作れるけど
ツールの使い方を覚えるの必要があるからSQLだけでやる方法で十分ならそれに越したことはない

120 :NAME IS NULL:2023/04/14(金) 15:45:14.15 ID:???.net
質問が微妙スギだけど
・部署テーブルは情報登録済み
・やりたいのはCSVから社員テーブルへのインポート
・社員テーブルにインポートするときは部署名から部署IDに変換したい
であれば普通に部署IDのカラムはSELECT id 部署テーブル WHERE division_name = CSVのdivision でとってくればいいんじゃねと思うけど
ワークテーブルにいったんいれてからの INSERT ~ SELECT でもいいと思うけどね
つかこれってSQL質問スレの話題じゃないのか

121 :NAME IS NULL:2023/04/14(金) 16:41:46.31 ID:???.net
なるほどDB設計関係なさそうなのにここに書いたのはSQL質問スレがないからだったのか
納得

122 :NAME IS NULL:2023/04/17(月) 21:21:43.06 ID:???.net
:2021/08/28(土) 22:08:57.33

123 :NAME IS NULL:2023/05/21(日) 11:30:33.67 ID:ikWPMqDN.net
会員ランクに関するテーブル設計で悩んでいます。
よくある「ブロンズ会員」「シルバー会員」「ゴールド会員」というのを実現したい場合、

会員   |ID、名前
会員ランク|ID、会員ID、ランクID、開始日時、終了日時
ランク   |ID、ランク名

というテーブル設計で実現できます。
ただ、
「ブロンズ会員なら購入金額から○%割引」
「シルバー会員になるには購入回数が○回以上」
「ゴールド会員の年会費は○円」

のような条件を入れたい場合、どのテーブルにカラムを用意するべきでしょうか?
ランクテーブルに入れるのか、ランク条件テーブルに入れるのか、
また、会員への付与と会員になる条件を同じテーブルにしても良いのか?
など、悩む部分が多いです。

最終的な要件によると思いますが、
会員ランクを設計したことがある人がいれば、考え方を教えてください。

124 :NAME IS NULL:2023/05/21(日) 12:29:24.30 ID:???.net
>また、会員への付与と会員になる条件を同じテーブルにしても良いのか?

そこ迷うならまずは別で考えるべきだね。
例として挙げられた条件はそれぞれランクに対する特典、加入条件、年会費とかになると思うけど
まずはそれぞれがなにを表すのか明確にしたうえでランクとの関係を検討する。
例えばランクに対する年会費が1つだけ必ず存在するなら同じテーブルに収めてしまってもいいかもしれないし、
特典が複数考えられるならそれは別テーブルにするしかない。

125 :NAME IS NULL:2023/05/21(日) 13:53:34.63 ID:???.net
>>124
ありがとうございます。
特典は用途が違うので別にした方が良さそうですね。
今のところ割引率しか考えていませんが、
ランク更新時にポイントの付与や、送料無料なども入れたいです。

また条件は「ランクになるための条件」という意味なので、
同じテーブルでも良さそうですね。

考えがまとまりました。ありがとうございました。

126 :NAME IS NULL:2023/05/21(日) 15:09:12.58 ID:???.net
DB設計で難しいところは
「ビジネスルール・将来のための柔軟性」と
「アプリ・DB構造の複雑性」のトレードオフの判断

例えば会員ランクに開始終了日時をもたせてるのは
「会員XXXはY月Z日からはゴールド会員」のような未来予約ができるようにするため思うんだけど
こういう種類の柔軟性が特典・加入条件・年会費に必要かどうかを
ビジネス要求と実装の両面から判断しないといけない

仮にランクになるための条件が増えたりした場合に
その要件が決まってからアプリだけでなくDBを改修したのでも十分だと判断したなら
別テーブルで行持ちにせずに同じテーブルで列持ちにしたのでもOK

127 :NAME IS NULL:2023/05/21(日) 16:48:20.23 ID:???.net
>>126
そこが難しいですね。
冷静に考えると、ビジネス要求を想定するなら
最小限の構成からスタートする方が良いと思います。
なぜなら、実際にスタートしてみないとわからないからです。

何日も悩んでベストの設計をひねり出すよりも、
ベターな設計で開発を始めた方が良い気がするんですよね。
極論を言えば、ビジネスとして成立するのであれば
上級のエンジニアに任せるという手もありますし。

今私はテーブル設計の勉強をしているだけで、
ビジネス用途として考えてないので、色々と想定していますが。

128 :NAME IS NULL:2023/05/22(月) 03:53:10.85 ID:2W+4hjqK.net
>>123
ER図を書いてみれば、わかりにくさに気づくよ。

129 :NAME IS NULL:2023/05/22(月) 09:53:15.09 ID:???.net
会員ランクの用途が不明だけど、自分なら会員に会員ランクの情報を定義すると思う
(会員ランクから最新の情報を取得するにはコストがかかるため)
会員ランク自体は履歴参照程度に使うだけにするかね
この設計をふまえて
「ブロンズ会員なら購入金額から○%割引」
「シルバー会員になるには購入回数が○回以上」
「ゴールド会員の年会費は○円」
こちらは全てランクに項目を持つようにすれば結果的に拾いたい情報は会員とランクだけでOK
まあいろんな考えがあるから試行錯誤するといいかもね

130 :NAME IS NULL:2023/05/22(月) 11:01:43.06 ID:???.net
各会員の購入回数やらゴールド会員年会費納付年月日やら

131 :NAME IS NULL:2023/05/22(月) 11:19:17.69 ID:???.net
>>127
ベストな設計なんて世の中に存在しないから
ベターな設計で開発を始めたほうが良いのは至極当たり前のことなんだけど
何を持ってベターな設計と判断するかという判断基準を持ち合わせてないはどうしようもないよね
持ち合わせてたら>>123のような質問しないでしょ?

勉強用の架空の要件に対する設計であっても
考えうる選択肢を出してみてそれぞれどういうメリット・デメリットがあるのかを
自分なりに細かい要件を想定しながらしっかり考えないと設計能力はつかないよ

132 :NAME IS NULL:2023/05/22(月) 11:20:12.26 ID:???.net
>>130
そうそうこういう項目をどう管理するかのほうがDB設計的には重要だったりするよね

133 :NAME IS NULL:2023/05/22(月) 12:17:34.06 ID:???.net
試しにChatGPTに設計サンプル出してもらったら概ね>>124の形で出てきた
要件をもっと細かく伝えればたたき台としてなら実用可能なものを作ってくれそう

Users: user_id(PK), username, email, password, other user-related fields
MembershipRanks: rank_id(PK), rank_name, rank_description, annual_fee
RankConditions: condition_id(PK), rank_id(FK to MembershipRanks), condition_description, min_purchases
RankBenefits: benefit_id(PK), rank_id(FK to MembershipRanks), benefit_description, increased_points, discount_percentage, free_shipping_enabled
UserMembership: user_id(FK to Users), rank_id(FK to MembershipRanks), acquired_date, expiration_date

134 :NAME IS NULL:2023/05/22(月) 13:31:32.85 ID:???.net
言うほど>>124と一緒か?
>>129が言うように会員に会員ランクを定義するのとも違うし、
ベストとかベターの前に色々ありすぎて答えなんて出ないだろ

135 :NAME IS NULL:2023/05/22(月) 14:10:47.79 ID:???.net
>>134
>言うほど>>124と一緒か?
ほぼ一緒でしょ
Usersテーブルが>>123の会員テーブルで
UserMembershipが>>123の会員ランクテーブルに相当
特典、加入条件はランクテーブル(MembershipRanks)とは別テーブル管理にして
年会費だけランクテーブルに組み入れてる

といっても俺は124じゃないから124の意図した内容が俺の理解と違ってたら知らんけど

136 :NAME IS NULL:2023/05/22(月) 14:12:37.98 ID:???.net
users:id(PK),rank_id(FK),name
ranks:id(PK),name,annual_fee,min_purchases,discount_percentage
user_ranks:id(PK),rank_id(FK),acquired_date, expiration_date

■会員のランクを取得
SELECT users.name,ranks.name FROM users INNER JOIN ranks ON users.rank_id=ranks.id

■会員ランクが有効なユーザーを取得
SELECT users.name FROM user_ranks INNER JOIN users ON user_ranks.user_id=users.id WHERE acquired_date <= '2023-05-22' AND expiration_date >= '2023-05-22'

■特定の会員(user_id:1)への特典を取得
SELECT ranks.discount_percentage FROM ranks INNER JOIN users ON ranks.id=users.rank_id WHERE rand_id='1'

■そのランク(rank_id:1)になる条件を取得
SELECT annual_fee,min_purchases FROM ranks WHERE rand_id='1'

これで良くないか?SQLの実行数も少ないし、わかりやすいと思うんだが。
user_ranksはログみたいな扱いにして、最新のレコードをinsertした後に
usersのrank_idをupdateすればJOIN回数も減るし、サブクエリも必要ない。

137 :NAME IS NULL:2023/05/22(月) 14:34:27.93 ID:???.net
>>136
ビジネスルールや運用次第でそれで良い場合もあれば良くない場合もある
主にusers.rank_idをどのタイミングでどう更新するかという問題
お金を払うタイミングと会員ランクを変更するタイミングを常に一致させるようなルールならそれでも可
じゃなければシステム停止してバッチで更新みたいなことが必要になるから普通はDB設計を変える

138 :NAME IS NULL:2023/05/22(月) 14:55:13.80 ID:???.net
ポオントサイトだと夜間バッチが普通だと思う
購入額合計が基準値越えたからってランクがその場で上がった経験は無いな

139 :NAME IS NULL:2023/05/22(月) 15:12:49.13 ID:???.net
夜間バッチに、参照テーブルみたいなのを用意するのが普通だと思うが。
>>133だと常にUserMembershipを判定しなければいけないし、排他ロックもかかる。
>>136だとユーザー情報にランク情報を紐づけているわけだから、
同時に更新するタイミングはない。
お金を払うタイミングで現在のランクを参照できるわけだから、
お金を払ってる時にランクが変わるという問題もない

140 :NAME IS NULL:2023/05/22(月) 15:22:45.15 ID:???.net
>>138
それはバッチで更新されてるかのように見えてるだけでしょ

141 :NAME IS NULL:2023/05/22(月) 15:24:47.54 ID:???.net
>>137
たとえば販売管理なら月次のテーブルをもって特定月の売上金額や入金額なんかを持つことがある
ランク付けが月毎に確定するような話なら上の例と同じように特定月のランクがどうなるかを持つような話じゃないかと思う
なので実際のテーブル設計は要件をふまえてするわけだし
ここはそういうスレだから「じゃあこんな場合はどうだろう」とかいろいろ話を膨らませてもいいと思うけど
攻撃的なやりとりはできる限りないほうがいいんじゃないかねぇ

142 :NAME IS NULL:2023/05/22(月) 16:09:37.41 ID:???.net
>>141
>ランク付けが月毎に確定するような話なら
ランク付けが基本的に年単位で確定するような話をしてるんだから同じでしょ

143 :NAME IS NULL:2023/05/22(月) 16:16:29.57 ID:???.net
>>139
>>>133だと常にUserMembershipを判定しなければいけないし、排他ロックもかかる。
排他ロック?はよくわからないけど必要なロックがかかったところで何か問題がある?

>>136で問題になるのは夜間バッチでusers.rank_idを更新する時にサービスを止めなきゃいけないということ
サービス停止して更新してまたサービス再開するのでも構わないなら>>136でもいいんだけど
サービス停止が伴うから完全自動化するのは難しくて運用負荷が高くなる

バッチ更新の場合でも締めと反映のタイミングをデータでコントロールできるようにするほうが一般的
特にお金のやり取りが絡むランクのアップダウンの場合は

144 :NAME IS NULL:2023/05/22(月) 16:24:11.52 ID:???.net
ネットショップで夜更けから

145 :NAME IS NULL:2023/05/22(月) 16:25:08.17 ID:???.net
すまん
明け方に30分程度サービス停止するサイトは結構あるでしょう

146 :NAME IS NULL:2023/05/22(月) 16:25:56.89 ID:???.net
>>143
サービス止める=排他ロックのこと言ってると思ったが、どうやら違うようだな

そもそも、サービス停止する必要ないだろ。
バッチ処理が発生する時間帯は、user_ranksテーブルを読みに行けばいいだけだ

スマホゲームなんかも一緒だぞ。
たとえば俺のやっているドラクエウォークは毎日15時にデータが更新されるけど、
更新の準備はバックグラウンドでやってて、15時に公開(適用開始)という流れだろう。
15時前には当然バッチ処理を行い、会員ランクの判定は終えているはずだ

だから、15時前後でサービスが止まることもなければ、
会員の現在のランクが正確に取得できないこともない

147 :NAME IS NULL:2023/05/22(月) 16:27:45.67 ID:???.net
普通は使ってに時間帯にバックアップとか保守作業やってます

148 :NAME IS NULL:2023/05/22(月) 16:28:53.86 ID:???.net
>>145
アフィリエイトのA8も毎月1日の16時まではデータ更新時間としている
だから、会員ランクの判定に時間を要すのは特別おかしくはない

149 :NAME IS NULL:2023/05/22(月) 18:48:17.95 ID:???.net
>>142
俺の書き方が悪かったと思ってるけど、一定期間ののちランクがきまるならその期間中のランクデータを作るよねって話をしたかっただけさ
販売って自分は買いたからこの場合は大抵月次で締めて請求書出したりするからそう書いただけね

150 :NAME IS NULL:2023/05/22(月) 19:39:00.04 ID:???.net
EC-CUBEに会員ランクのプラグインがあるんだが、
画面キャプチャ見ると>>136の設計っぽい
https://www.ec-cube.net/products/detail.php?product_id=2492

ランク更新は手動でもできるって書いてるから、
意外とコストがかかるような処理じゃないのかもな

151 :NAME IS NULL:2023/05/22(月) 20:53:51.42 ID:???.net
>>136
細かいことだけど users.rank_id と user_ranks.rank_id が同じ意味ならどちらか削るべきだな。
users と user_ranks を分ける意味もないかも。

152 :NAME IS NULL:2023/05/22(月) 21:18:50.05 ID:???.net
>>151
削ったらリレーションできないぞ

153 :NAME IS NULL:2023/05/22(月) 21:46:06.35 ID:???.net
users.id と user_ranks.id があるんだから問題ない。
逆に両方あると更新時異常の危険がある。

余談だけど「リレーション」の使い方がおかしいのはちゃんと学んだことがない証拠。

154 :NAME IS NULL:2023/05/22(月) 23:14:44.67 ID:???.net
リレーショナルデータベースでリレーション使ったら駄目なのか・・・

155 :NAME IS NULL:2023/05/22(月) 23:21:53.10 ID:???.net
おかしな使い方はな。

156 :NAME IS NULL:2023/05/23(火) 10:39:48.93 ID:???.net
>>146
>更新の準備はバックグラウンドでやってて、15時に公開(適用開始)という流れだろう。
>15時前には当然バッチ処理を行い、会員ランクの判定は終えているはずだ
そういうよくある仕組みをサービス停止せずに実現するためには
15時まで有効なデータと15時以降に有効なデータを1ユーザーあたり最低2件を同時に持ってないと無理
それが>>133>>136の違い

157 :NAME IS NULL:2023/05/23(火) 10:41:39.15 ID:???.net
>>154
リレーションとリレーションシップは違うぞ

158 :NAME IS NULL:2023/05/23(火) 10:49:19.20 ID:???.net
>>148
アフィリエイトよく知らないけど
新しい会員ランクがリアルタイムで取得できなくても困らないからじゃないの?
毎月1日の0~15時にあった流入についても次の締め処理時に新しいランクのトランザクションとして扱えばいい
送料無料にするかどうかのように各トランザクションで最新の会員ランクが必須になるような処理とは若干種類が違う

159 :NAME IS NULL:2023/05/23(火) 11:42:12.72 ID:???.net
Bardさんに聞いたらこのように言われた。

会員ランクは頻繁に参照されるデータですが、会員ランクテーブルとユーザーテーブルを結合して集計すると、パフォーマンスが低下する可能性があります。ユーザーテーブルにランクを保持することで、高速に参照できます。

会員ランクはユーザーのランキングに影響する重要なデータです。ユーザーテーブルに会員ランクを保持することで、他のテーブルとの関連付けが容易になります。

もちろん、ユーザーテーブルに会員ランクを保持する場合は、会員ランクテーブルにデータを挿入したり更新したりするたびに、ユーザーテーブルのランクも更新する必要があります。これはトリガーなどを利用して自動化できます。

160 :NAME IS NULL:2023/05/23(火) 11:59:00.73 ID:???.net
あたりまえの事を言われるけどそれが普通じゃないかね
ランクの確定が不定期なら最新のランクを取り出す条件があいまいになるから特定ユーザーの最新ランクをとるのにコストがかかる
月次や年次であれば2023年5月のランクといった指定で最新のランクが取り出せるからコストは少ない

161 :NAME IS NULL:2023/05/23(火) 15:02:02.72 ID:???.net
特定の1ユーザーのランクを取得する話と
ユーザーの全数を対象にしたようなレポーティングの話を同列に語ってない?
前者のクエリコストなんて微々たるものだよ

お金を支払えばその時点から即ランクアップするようなビジネスルールなら
>>136のような構造でも問題ないんだけどね

162 :NAME IS NULL:2023/05/23(火) 16:06:00.81 ID:???.net
DBの設計次第でビジネスのその後が変わると言っても過言じゃないのに、
あまりにもネット上に情報が少ないよな
今回の会員ランクの話題だって、ググってもピッタリなの出てこないぞ

163 :NAME IS NULL:2023/05/23(火) 16:49:25.79 ID:???.net
普通はその情報で商売するし

164 :NAME IS NULL:2023/05/23(火) 18:29:07.47 ID:???.net
ピッタリも何も要件としてのランク確定のタイミングがわかれば似たような事例なんていくらでも出てくるでしょ

165 :NAME IS NULL:2023/05/23(火) 18:40:08.05 ID:???.net
さてどこから見ようかしら、ネットは広大だわ

166 :NAME IS NULL:2023/05/23(火) 18:50:19.97 ID:???.net
>>164
出してくれよ。>>136ですら出してるの見つからないぞ

167 :NAME IS NULL:2023/05/23(火) 19:39:26.70 ID:???.net
>>162
ふつうはビジネス要件が先でそれに合わせてDB設計するだろ。
設計だけ持ってきてどうするよ。

168 :NAME IS NULL:2023/05/23(火) 19:46:19.50 ID:???.net
>>167
夢みたいなビジネス要件持ち出して失望される人?

169 :NAME IS NULL:2023/05/23(火) 19:49:39.42 ID:???.net
ではビジネス要件書いてください、すぐにしばってご覧にいれます

170 :NAME IS NULL:2023/05/23(火) 20:06:29.95 ID:???.net
>>168
それって、あんたが要件をまとめたら夢物語になってしまうってこと?

171 :NAME IS NULL:2023/05/23(火) 22:12:02.57 ID:???.net
>>170
逆じゃね?

172 :NAME IS NULL:2023/05/23(火) 23:18:08.17 ID:???.net
設計の前に要件定義しなきゃならんて話しただけで>>168みたいな反応するのはそういうことなんだろう

173 :NAME IS NULL:2023/05/23(火) 23:56:35.45 ID:???.net
現実にはハイレベルのDB設計は要件定義とは切り離せない

174 :NAME IS NULL:2023/05/23(火) 23:59:58.68 ID:???.net
そもそも>>167が読み違えてる
ビジネス要件決めないと設計できないなら
ER図公開している人らは、何を持って公開してるのかと
「こういうときはこういう設計」という情報を発信したくて公開してるんだろうに
1から10まで決められないと考察すらできないのは無能の証だぞ

175 :NAME IS NULL:2023/05/24(水) 07:25:16.52 ID:???.net
それで>>174みたいな人はユーザーの要望とは違うものでも「これはこういうものなんです(キリッ」
とかいってユーザーともめるようなシステム提供するんですね
わかりますw
そもそも公開してる情報なんて実際に動いてるものでもなんでもなく
自分で要件をイメージして作ってるだけでしょ
それを持ち出してきて勝手に相手を無能扱いするほうが怖いわ

176 :NAME IS NULL:2023/05/24(水) 08:52:55.10 ID:???.net
イメージの話ししてるのに仕事の話ししてるのお前だろ

177 :NAME IS NULL:2023/05/24(水) 09:56:45.71 ID:???.net
仕事の想定もイメージだろ?何勝手に決めてるわけ
もともとはふわっとした質問なんだからDB設計なんて回答する人の経験度合でいくらでも膨らむ話でやり取りすればいいのに
関係ない話持ち出して無能だなんだ決め打ちするやつの方がよっぽどあたおかでしょ

178 :NAME IS NULL:2023/05/24(水) 11:21:54.32 ID:???.net
第三者から見れば君たちすごく似た者同士だよ
言ってることもほとんど同じ
仲良くね

179 :NAME IS NULL:2023/05/24(水) 11:25:01.66 ID:???.net
仕事募集しているなら、そういう板に移動してやって

180 :NAME IS NULL:2023/05/24(水) 12:08:21.72 ID:???.net
なんで急に仕事募集の話になるのかw

181 :NAME IS NULL:2023/05/25(木) 01:21:23.01 ID:CAQoWwdr.net
アクセンチュアとIBMの高給取りが、概念データモデルの意味がわかってなくて、概念データモデルと論理データモデルと物理データモデルのすべてが最終的な成果物と言っているくらいだからなw

182 :NAME IS NULL:2023/05/25(木) 11:00:45.26 ID:???.net
逆に言えばそれら理解できなくても問題ないってことだな

183 :NAME IS NULL:2023/05/25(木) 11:35:25.95 ID:???.net
>>174
「ビスネス」要件かどうかはともかく
こういうときはこういう設計、の、「こういうとき」がまさに要件だぞ
要件の不明な設計なんて、何の意味もないけど?

まあ往々にして、要件が不明で設計から読み解くことはあるがな

184 :NAME IS NULL:2023/05/25(木) 11:38:42.31 ID:???.net
今回の質問者は「こういうとき」については触れてません
皆さん好きに弄ってください、みたいな

185 :NAME IS NULL:2023/05/25(木) 12:54:43.86 ID:???.net
>>181
RDBMSへの実装を目的とした論理データモデルや物理データモデルとは違って
概念モデルは組織やプロジェクトや用途によってどういうものを作るかかなり違ってくる

それを成果物に含めるかどうかもプロジェクト次第だが
上流工程で食ってる人ほど成果物に含めたほうがお金になる部分だから
アクセンチュアやIBMが最終成果物に入れるのは至極当然の話

自分の考える「正解」に凝り固まらずもう少し視野を広げてみては?

186 :NAME IS NULL:2023/05/25(木) 13:26:11.97 ID:???.net
>>184
普通に「こういうことしたい」に対して「こうすれば?」の意見は数多く出てるぞ
なぜか後半になってビジネス要件とか言い出してるやつがいるけど

187 :NAME IS NULL:2023/05/25(木) 14:54:15.70 ID:???.net
>>183
>こういうときはこういう設計、の、「こういうとき」がまさに要件だぞ
「こういうとき」が要件の場合もあればそうでない場合もあるよ
設計選択に影響を及ぼす条件や状況がすべて要件というわけではないからね

それに実践ではDB設計プロセスを通して初めて表面化する要件があるほうが普通だから
ある程度曖昧な条件からでもたたき台となる設計案を提示できる能力ってのはすごく重要

188 :NAME IS NULL:2023/05/25(木) 15:59:02.34 ID:???.net
>>187
こういう人が上流工程担当してると満足なもの作れなくて後続の工程担当者に陰で無能扱いされる典型だわな
最後まで荒れるプロジェクトになる典型的な人材w

189 :NAME IS NULL:2023/05/25(木) 16:05:13.47 ID:???.net
>>187
こういうときはこういう設計の、こういう時が要件じゃない例を挙げてみてくれ
要件定義を理解してなさそうな人に言うほど一般的なケースだとは思えん

190 :NAME IS NULL:2023/05/25(木) 19:33:12.34 ID:???.net
実際にDB設計したことないでしょ
してたらこんな発言するわけない
指示されたことしかできないPGでしょ

191 :NAME IS NULL:2023/05/25(木) 19:39:56.33 ID:???.net
指示された通りに作れるPGは優秀

192 :NAME IS NULL:2023/05/26(金) 02:18:22.09 ID:egPJEgSO.net
>>185
概念データモデルは、論理データモデル、物理データモデルと違うデータモデルだから、これを残すと整合性が取れていない、ドキュメントとしても意味がないものになる。

概念データモデルは設計時の一時的なもので、論理データモデルができれば捨てるもの。

設計途中のものを残されても、データモデリングというものがわからない日本人には、論理データモデルだと誤解してしまう。

193 :NAME IS NULL:2023/05/26(金) 08:54:55.30 ID:???.net
正しい方法が一つだけと決まっているわけではないと思うが意味が分からんなぁ。
概念モデルを残すと整合性が取れないって、その整合性が取れないモデルを基に
論理モデルを作ったということかな?

194 :NAME IS NULL:2023/05/26(金) 09:54:54.36 ID:???.net
普通に設計できる人が概念データモデルとそれ以外のデータモデルを間違えるなんてありえないんだが
それをするような人はそもそもわかってないだけでしょ
別に日本人だからとか関係なくね

195 :NAME IS NULL:2023/05/26(金) 20:56:27.16 ID:lIsQEkEz.net
概念データモデルは設計時の過程で作るもので、なぜか概念データモデルと論理データモデルと物理データモデルは最終的にすべて同じなると思っている自称専門家がいる。

196 :NAME IS NULL:2023/05/26(金) 21:36:07.63 ID:???.net
なぜか概念データモデルと論理データモデルと物理データモデルは最終的にすべて同じなると思っている人がいると思ってる人がいる。

197 :NAME IS NULL:2023/05/26(金) 21:41:44.47 ID:???.net
異端な主張をするのは自由だけど論拠が無さ過ぎるからそりゃ誰にも相手にされんわ
自称専門家氏が自称専門家呼ばわりしてる人達のほうが常識があるのが手にとるようにわかる

198 :NAME IS NULL:2023/05/26(金) 22:09:28.63 ID:???.net
要件定義しなくても設計できるとほざいてた人と同一人物かねえ?

199 :NAME IS NULL:2023/05/26(金) 22:57:10.15 ID:???.net
違うけど?

200 :NAME IS NULL:2023/05/26(金) 23:26:24.12 ID:???.net
同じってどういう意味で同じっていってるのかしらんが
少なくとも最終的にその三つが整合性がとれないとか、その設計は破綻しとるわ

201 :NAME IS NULL:2023/05/26(金) 23:45:05.50 ID:???.net
そこはまあ理解できる範囲だけどな

これから作るシステムの概念モデルと出来上がったシステムの概念モデルが同じになるかというと必ずしもそうじゃない
物理モデルを作る時に論理レベルでの修正が発生したら普通は論理モデルも修正するけど
同じことを概念モデルでもやるかといえばやらないことのほうが多いのが実情だから

202 :NAME IS NULL:2023/05/27(土) 08:46:56.22 ID:???.net
概念データモデルまでさかのぼってメンテすることはないでしょ
後の工程で作成するデータモデルはよりシステムにあった内容に落とし込むものだし
なので少なくとも概念データモデルにあるのに論理・物理データモデルにその影すらないというのはありえない

203 :NAME IS NULL:2023/05/27(土) 10:21:15.93 ID:???.net
それらのモデルを設計段階の違いとみなすか抽象度の違いとみなすか、それぞれ考え方が違うってことだろ。
概念モデルは単なるラフスケッチだとする流儀もあってもいいと思うがそれしかないってこともないと思う。

204 :NAME IS NULL:2023/05/27(土) 11:49:13.65 ID:T0Xr/+f1.net
>>200
物理データモデルのテーブル定義、外部キーなどのリレーション、その他の制約まで論理データモデルどころか、概念データモデルに反映するから、設計の過程がなくなってタイトル違いのドキュメントを作るらしい。

概念データモデルでのエンティティ名と論理データモデルのエンティティ名は一致するものと一致しないものが混ざり、エンティティ定義は同じ、そのエンティティの属性名は同じなんだって。

205 :NAME IS NULL:2023/05/27(土) 12:29:41.12 ID:???.net
それはそれはエキセントリックな方々をお仕事をされてて微笑ましい

206 :NAME IS NULL:2023/05/27(土) 13:03:46.27 ID:???.net
>余談だけど「リレーション」の使い方がおかしいのはちゃんと学んだことがない証拠。

あぁ、これ。

207 :NAME IS NULL:2023/05/27(土) 13:54:54.25 ID:T0Xr/+f1.net
>>206
そこは単に手抜きで書いただけ

208 :NAME IS NULL:2023/05/27(土) 16:32:11.30 ID:???.net
シェルスクリプトのことをシェルと手抜きで書くみたいな?

いやいやいやw

209 :NAME IS NULL:2023/05/27(土) 16:33:45.47 ID:f4rX6E1x.net
さすがにシェルスクリプトのことをシェルとは言わない。

なんでみんなシェルスクリプトのことをシェル、シェルと言うのかわからないよな。

210 :NAME IS NULL:2023/05/27(土) 16:52:23.10 ID:???.net
私はシェルになりたい

211 :NAME IS NULL:2023/05/27(土) 16:58:24.31 ID:f4rX6E1x.net
WindowsバッチファイルのことをDOSバッチと呼ぶ会社があるけど、なんでDOSなんだよと思っている。

212 :NAME IS NULL:2023/05/27(土) 17:06:31.24 ID:???.net
wikipediaをwikiと略すようなものだな。
そういう略し方をしたらバカと思われることを知っている人は当然やらない。

213 :NAME IS NULL:2023/05/27(土) 17:13:01.14 ID:???.net
一部の閉鎖的グループだとバカだとか言い出すのかな?

214 :NAME IS NULL:2023/05/27(土) 17:24:17.74 ID:???.net
面前では言わんだろ。心の中で思うだけで。

215 :NAME IS NULL:2023/05/27(土) 17:29:59.92 ID:???.net
私には、心の中の声が聞こえる!

216 :NAME IS NULL:2023/05/27(土) 17:42:28.43 ID:???.net
>>215
気がふれた?

217 :NAME IS NULL:2023/05/27(土) 17:49:01.82 ID:???.net
>>212
wikipediaはwikiの一種だから文脈によっては全く問題ない
リレーションシップとリレーションやシェルスクリプトとシェルは
関係はあっても包含関係にはない別のものだからJavaScriptのことをJavaと呼ぶレベルの誤用

とマジレスしてみたけどジョークだったかな?

218 :NAME IS NULL:2023/05/27(土) 18:20:16.24 ID:???.net
頭の中ではわかってても書いたり口にしたりしたときに端折ってしまっていることはないこともない
ただそれを指摘されたら親しい間柄なら「ごめんごめんリレーションシップのことね」で済ませればいいと思うが
ここは隙あらば見たいな人が多いから注意しないとなw

219 :NAME IS NULL:2023/05/27(土) 18:31:27.06 ID:???.net
そこは「ごめん、知らなかった。教えてくれてありがとう。」だろ?

220 :NAME IS NULL:2023/05/27(土) 18:36:45.84 ID:???.net
本当、物知りだよねwww

221 :NAME IS NULL:2023/05/27(土) 20:25:27.41 ID:???.net
結構進んでるからDB設計の話ししてるかと思ったら・・・・

222 :NAME IS NULL:2023/06/07(水) 09:01:55.08 ID:???.net
要件定義を突き詰めれば突き詰めるほど、ネットだけでは完結しないね
利用者の声はあまりネットで拾えないから、リアルの経験が必要になる

223 :NAME IS NULL:2023/06/07(水) 22:28:23.68 ID:???.net
ネットサービスの要件定義の話ならスレ違いだと思うが

224 :NAME IS NULL:2023/06/08(木) 01:07:19.44 ID:7Ffue6bF.net
>>221
いちいち読んでないところから読み直すのかよw

225 :NAME IS NULL:2023/06/08(木) 07:48:06.88 ID:???.net
お前ら批判ばかりだな

226 :NAME IS NULL:2023/06/19(月) 01:21:03.70 ID:???.net
ものを教えるよりケチを付ける方が楽だし、楽しい

227 :NAME IS NULL:2023/06/19(月) 11:50:27.16 ID:???.net
教えようよ。損するわけでもないんだし

228 :NAME IS NULL:2023/06/19(月) 20:32:11.12 ID:???.net
俺は教えてるよ?聞け。

229 :NAME IS NULL:2023/06/21(水) 16:39:17.93 ID:???.net
DB設計をAIに相談したら「要件次第」ってお前らみたいなこと言われるんだけど、
要件ってどこまで突き詰めればいいの?

たとえば、ユーザー数やアクセス頻度などを想定していたとしても
運用していくうちに当初の想定と異なるってケースはよくあるじゃん?
小規模だからテーブル数少なくしてたら、レコードが肥大化したり、
大規模だからテーブルを細かく分けたら、保守が大変になったり。

230 :NAME IS NULL:2023/06/21(水) 17:16:59.27 ID:KbMACozE.net
>>229
人間がわかりやすい単位でテーブルを作ればいい
テーブルが多いとたいへんという感覚がわからない。
データモデルが単にわかりにくいだけじゃないのか?

231 :NAME IS NULL:2023/06/21(水) 18:02:43.23 ID:???.net
AIは人間から学習しててケースバイケースだと断って始まる記事がほとんどだからな

232 :NAME IS NULL:2023/06/21(水) 21:21:16.30 ID:???.net
>>229
>たとえば、ユーザー数やアクセス頻度などを想定していたとしても

そういう性能要件は逆に設計初期段階では気にしすぎない方がいい。

233 :NAME IS NULL:2023/06/21(水) 22:09:02.77 ID:???.net
>>232
じゃ、要件次第ってのは何を見ればいいの?

234 :NAME IS NULL:2023/06/21(水) 22:30:36.16 ID:???.net
データベースに入れる必要があるデータにはどいういうものがあってそれらの意味や関係がどうなっているか。

235 :NAME IS NULL:2023/06/21(水) 22:31:23.73 ID:???.net
>>229
>要件ってどこまで突き詰めればいいの?
要件がすべて出揃って固まってから初めてDB設計をしようとしちゃダメ
ハイレベルのDB設計は要件定義と同時並行で進めるものなので
DB設計上が要件をもっと突き詰めなければいけない状況が出てきたらその都度深めていく

小規模だからテーブル数を少なくとか大規模だからテーブルを細かく分けるというのは意味がわからない
設計時の想定と全く異なる状況になって設計が合わなくなったなら変更すればいいじゃん
最初から当然予測しておくべき変化だったのかどうかは設計力向上のためには重要なポイントにはなるけど

236 :NAME IS NULL:2023/06/21(水) 22:37:39.65 ID:???.net
>>235
何かやりたいことができたとき、それをどう実現するか考えるだろ?
DB設計とプログラミングを同時に構想すると思うが、
見通しが立たないなら同時並行で進められないじゃん
設計後に「その要件無理だよ」ってなったらどうするのよ

237 :NAME IS NULL:2023/06/21(水) 22:41:14.85 ID:???.net
>>236
DB設計とプログラミングを同時に構想?

設計後にってのはよくわからんが
設計中に要件が実現不可だって判明したなら
要件を変えるかプロジェクトを中止するしかないじゃん

238 :NAME IS NULL:2023/06/21(水) 22:52:23.43 ID:???.net
じゃ、意味がないじゃん。考えるだけ無駄だじゃん

239 :NAME IS NULL:2023/06/22(木) 08:48:23.24 ID:???.net
開発途中に仕様が変わるなんてことは普通にあるから最初から完璧なものを求めなくてもいいと思うけど
作るシステムがどんな運用をしたいかは最初の時点で分かるからそれをまとめるのが要件定義だし
そこから落とし込むのが設計では?
要件にないものを設計する必要はないんだから要件次第っていうのは当たり前だと思うが

240 :NAME IS NULL:2023/06/22(木) 10:38:13.59 ID:???.net
要件定義って一口で言っても色々段階がある

241 :NAME IS NULL:2023/06/22(木) 11:14:08.29 ID:???.net
>>239
今、1ヶ月ぐらい要件考えてから設計に落とし込めないってのを繰り返してるわ
単純なものなら考えなくても設計できるけど、単純なものは既製品にあるからな
金だしてコンサルに聞いても答えは見つからないし、ドツボにはまってる

242 :NAME IS NULL:2023/06/22(木) 11:33:49.31 ID:???.net
要件から設計に落とし込めないってことはそもそも要件がおかしいからじゃね

243 :NAME IS NULL:2023/06/22(木) 13:15:47.45 ID:???.net
いや、要件はおかしくないよ。実現してるサイトやアプリもあるし
それがどうやって作られてるのか設計が思い浮かばないんだよ

244 :NAME IS NULL:2023/06/22(木) 15:25:57.80 ID:???.net
なんじゃそりゃw

245 :NAME IS NULL:2023/06/22(木) 15:41:03.76 ID:???.net
じゃあ設計者が無能ってことだな
残念っ!

246 :NAME IS NULL:2023/06/22(木) 17:40:16.39 ID:???.net
会員ランクまだ悩んでたのか

247 :NAME IS NULL:2023/06/22(木) 18:49:20.76 ID:???.net
そもそも金出す所違うよな
コンサルなんかにはらうより設計してくれる技術者にだせよw

248 :NAME IS NULL:2023/06/22(木) 19:06:54.63 ID:???.net
いやまあコンサルでも設計してくれるところはいくらでもあると思うが
普通のところなら思い浮かばないってことはないだそうな

249 :NAME IS NULL:2023/06/22(木) 23:15:47.96 ID:???.net
俺もコンサル出せる予算もらえてるならコンサル料より安いこじんまりしてるけど経験豊富な小さい設計屋に投げるわ
そういう小さいとこだとガチガチの要件出さないでもヒアリングからよしなにしてくれるとこも多い
そのデザインを解析して良ければそのまま使って必要があれば手を加える
実例から学ぶのが1番早い

250 :NAME IS NULL:2023/06/22(木) 23:22:39.72 ID:???.net
そりゃ安くてうまい信頼できる業者を知ってるんならそっちに頼むだろ。

251 :NAME IS NULL:2023/06/23(金) 00:48:38.59 ID:???.net
実例じゃなくて実務から学ばないとダメなんだよ
といったところでたぶん違いがわからないんだろうが

252 :NAME IS NULL:2023/06/23(金) 00:51:47.95 ID:???.net
>金だしてコンサルに聞いても答えは見つからないし
「(予算はないけどもし仮に)金だしてコンサルに聞いても(たぶん)答えは見つからない(だろう)し」
おい!

253 :NAME IS NULL:2023/06/23(金) 07:45:51.49 ID:???.net
うちもとあるシステム開発の際にコンサルに依頼したことあるけど
システム構築にあたって
コンサルが最初から教えてくれたもの7
教えてくれたものをもとにさらにこちらから質問して回答を得たもの3
ぐらいで作ったな
相手によるんだろうけどコンサル側から最初から10引き出すには相応の金が必要か相手との信頼関係が必要かもね
まあスレチでしたね

254 :NAME IS NULL:2023/06/23(金) 10:45:42.75 ID:???.net
要件定義の中身や要件定義とDB設計の関係は
こういう要件定義系の書籍を読むととある程度イメージできると思う
https://www.ipa.go.jp/publish/tn20191220.html

がっつりウォーターフォールのフルスペックなやり方だから
そのままやる必要はないんだけどどういう項目が必要かは分かるはず

255 :NAME IS NULL:2023/06/23(金) 11:01:29.74 ID:???.net
241だけどみんな誤解している
外部の意見を聞くために金だしてコンサルに聞いてるんだよ
第三者の声を聞かないと良い製品・サービスなんて作れないからな

で、設計者に金出せって言うけど、俺が開発するのに意味がないだろ
金が湯水のようにあるならとことん相談して、納得行く設計してくれるだろうが、
そうじゃないから自分で設計できなきゃいけない

256 :NAME IS NULL:2023/06/23(金) 12:37:42.60 ID:???.net
だから無能な設計者(あなた)のかわりになる人間にも金を出せって話

257 :NAME IS NULL:2023/06/23(金) 13:02:20.01 ID:???.net
>>255
>第三者の声を聞かないと良い製品・サービスなんて作れないからな
んなわけない
寧ろ逆でコンサル雇わないと良い製品・サービスを作れないと思ってる会社は良い製品・サービスを作れない

258 :NAME IS NULL:2023/06/23(金) 13:53:53.06 ID:???.net
>>256
だから順番が逆だろ。お前らいつも「要件次第」って言ってるだろ
要件決まらないのに設計者に金出せないだろ

>>257
もちろんコンサルに金出した上で語ってるんだよな?
他人の意見を叩くためだけに「こうしろ」って言ってるんじゃないよな?

259 :NAME IS NULL:2023/06/23(金) 14:11:50.07 ID:???.net
ごめん、無能な設計者は認めるわ。有能な設計者に出せる金が無いのも認めます

260 :NAME IS NULL:2023/06/23(金) 18:31:19.53 ID:???.net
>今、1ヶ月ぐらい要件考えてから設計に落とし込めないってのを繰り返してるわ
このレスはそもそも要件が決まらないのか要件は決まったけど設計ができないのかどっちなの?
まあどっちにしても決められないのはそいつが無能だからなわけだから
要件決められないならそんなシステム作るのはあきらめたほうがいいし、設計できないなら金出して設計できる人雇えばいい
その際に金をだせないならシステム作るのあきらめろ
それだけの話でこのスレでダラダラやる話じゃねーわw

261 :NAME IS NULL:2023/06/23(金) 21:18:24.60 ID:???.net
>>255
もしかして、地道にユーザーにインタビューすれば要件が出てくる業務システムのようなものじゃなくて
エンドユーザー向けサービスの話だったりするのかな。

262 :NAME IS NULL:2023/06/23(金) 21:46:54.97 ID:???.net
>>258
そもそも要件が設計に落とし込めないって話だったはずだが
つまり要件は決まってる前提の話だろ

263 :NAME IS NULL:2023/06/23(金) 23:32:49.14 ID:???.net
設計をするのに十分と言える要件に落とし込めてるかどうか
それを判断できないということなんだろう

264 :NAME IS NULL:2023/06/24(土) 10:02:13.93 ID:???.net
いつまでもうんうん悩んで書きかけの検討メモばっか量産してるんだろ
叩き台という言葉を知らんのか

265 :NAME IS NULL:2023/06/24(土) 10:16:41.32 ID:???.net
ここは悩み事相談室

266 :NAME IS NULL:2023/06/24(土) 14:01:38.01 ID:???.net
>>258
別に「こうしろ」とは言ってない
良い製品・サービスを作るのに第三者の声、特にコンサルが必要だと思ってるのが間違いだと言ってるだけ
コンサルを雇う側コンサルとして雇われる側どちらの経験もあるよ

267 :NAME IS NULL:2023/06/24(土) 14:36:37.56 ID:I68LVf1U.net
コンサルは同業他社のものを押し付けてくるだけだしな

268 :NAME IS NULL:2023/06/24(土) 16:58:06.88 ID:???.net
たとえばツリー構造の設計があるだろ?入れ子集合モデルみたいな。

親カテゴリ
└子カテゴリ
 └孫カテゴリ

要件(複数カテゴリ)はわかるけど、ツリー構造に落とし込めない場合
実現できない(設計できない)となるわけじゃん。

で、知識ある設計士に「複数カテゴリを実現するテーブル設計書を作って」
と依頼すれば作ってくれるだろうけど、概念を理解できないと開発ができない

こう説明すればわかってくれるか?
なお、「複数カテゴリが必要か否か」みたいな要件を、
その道に詳しいコンサルに相談したっていう意味な

269 :NAME IS NULL:2023/06/24(土) 17:46:31.09 ID:???.net
>要件(複数カテゴリ)はわかるけど、ツリー構造に落とし込めない場合
>実現できない(設計できない)となるわけじゃん。

そのギャップが埋められない理由があよくわからんな。
要件定義でその「カテゴリ」というものがどう振舞わなければならないのか分析が足りてないんだと思うが
そこをコンサルがやってくれなかったってことなのかな。

270 :NAME IS NULL:2023/06/24(土) 18:05:31.47 ID:???.net
それができないなら、まずその複数カテゴリがホントに入れ子のツリーなのか考えたほうが良いよ
やってることが逆で、設計(ツリー)に要件(複数カテゴリ)を当てはめようとするからできないんだよ

で、できる人に頼んだら出来上がった設計物の概念が理解できないってか?
それなら作成も金出して頼めよ
お前には無理ってやつだ

271 :NAME IS NULL:2023/06/24(土) 18:37:35.54 ID:???.net
アイデアとられそうとかそういうのを回避したいのかもしれんが
自分がやってることを言えばいいものをたとえ話出すとかいみわからんわ

そもそも概念で設計者に作ってもらおうとするからできないんだろw
要件作れよw

ツリー構造の話で言えば一般的には
親キー、子キーの情報を持つテーブルと
それぞれのキーが持つ情報のテーブルだけじゃね

そもそも君には無理だと思うからあきらめたほうがいいんじゃない
要件定義時点ならまだ後戻りできるでしょ

272 :NAME IS NULL:2023/06/24(土) 18:45:23.72 ID:???.net
あー、会員ランクの人か。まだやってたのかw

273 :NAME IS NULL:2023/06/24(土) 22:33:27.90 ID:???.net
みんなの予想通り要件定義ができてなかったパターンだったね

274 :NAME IS NULL:2023/06/24(土) 22:41:00.87 ID:???.net
カテゴリの構造はDB実装とは関係のないビジネス要件
ツリー構造だとしても使われ方によってRDBMSでもいろんな実装方法がある

275 :NAME IS NULL:2023/06/24(土) 23:32:20.22 ID:???.net
>>274
実装がDB設計の事をいってるんだとしたら>>271書いたの俺なんだけど
自分も何個も設計したわけじゃないし設計した場合は99%これなんだけど
これ以外の設計ってどんな感じなのがあるのかね

ツリーとは少し違うんだけど
1階層目は固定で2-5階層(最大5階層まで)っていう制約があるものだけ
1-5階層の項目を持ったテーブル設計したぐらいだわ

276 :NAME IS NULL:2023/06/24(土) 23:44:20.68 ID:???.net
>なお、「複数カテゴリが必要か否か」みたいな要件を、
>その道に詳しいコンサルに相談したっていう意味な

コンサルってECコンサルかよ
しかも必要か否かはコンサルが決めることじゃないだろw
DB設計以前に経験が無さ過ぎるみたいだから
どこかで丁稚奉公して出直すことをオススメする

277 :NAME IS NULL:2023/06/25(日) 00:52:13.32 ID:???.net
>>275
一番よく使われてるのは隣接リストモデル(単に親IDもしくは子IDのカラムを付与して管理するやつ)
多対多が必要なら>>271のようにする(これはClosureテーブルというやり方)
他には>>268に書いてる入れ子集合モデルや経路列挙モデルなんかがある
SQL ServerのhierarchyidやPostgresのltreeが経路列挙モデルを簡単に扱えるようにしたもの

278 :NAME IS NULL:2023/06/25(日) 08:36:28.39 ID:???.net
>>276
ECコンサルではない
たとえば弁護士ドットコムみたいなサイト作るのに
弁護士の人にお金出して教えてもらうって感じだ

ツリー構造は例で出したのに、相変わらずそこだけ切り取るのな
俺より論理的に考えられる設計士のはずなのに
こういうところでは短絡的なんですね

279 :NAME IS NULL:2023/06/25(日) 08:49:08.99 ID:???.net
そもそもだけど、俺(241)は話の流れで「要件定義でこういう悩みがある」
って自分の経験を語ってるだけで、悩みを相談してるわけじゃないぞw
なぜか悩み相談者みたいな扱いうけてるけど

280 :NAME IS NULL:2023/06/25(日) 10:16:04.61 ID:???.net
それはすまんな
ネタに飢えているだけだ

281 :NAME IS NULL:2023/06/25(日) 15:21:36.77 ID:???.net
>要件(複数カテゴリ)はわかるけど、ツリー構造に落とし込めない場合
>実現できない(設計できない)となるわけじゃん。

これってもしかして
階層の深さを限定しないツリー構造が必要になる要件があった場合に
設計者がRDBでのツリー構造の実現方法(例えば入れ子集合モデル)を知識として持ってなければ
要件が明確でも設計に落とし込めないだろ、という例として書いてるのかな?

だとするともう少し日本語どうにかしないと伝わらないぞ

282 :NAME IS NULL:2023/06/25(日) 17:10:50.53 ID:???.net
>>281
いや、日本語わからないのは都合の良い箇所を切り取ってるからだろ
端から「たとえば~」って書いてるのに
なぜかその部分だけ切り取って批判してるじゃん

283 :NAME IS NULL:2023/06/25(日) 18:04:01.15 ID:???.net
そのたとえ話で主張したい点がどこなのかがよくわからないってことだと思うぞ。
>>281じゃなくて>>269だけどやっぱりよくわからん。
>>281は単なる批判じゃなくて助け舟を出していると思うがそれも伝わらないのか。。。

284 :NAME IS NULL:2023/06/25(日) 19:07:22.45 ID:???.net
設計自体が思い浮かばないって話は全く理解できないけど
知識不足が原因でキレイな設計や性能が十分出る設計に落とし込めないという話なら理解できる

そういうことが言いたかったんだろうということで好意的に解釈しとくわ

285 :NAME IS NULL:2023/07/06(木) 20:59:46.52 ID:y6jOuxke.net
契約者、契約など、こんな入れ物の単位も思いつかない人間が多い。

286 :NAME IS NULL:2023/07/06(木) 21:01:04.67 ID:y6jOuxke.net
Excelで資料を作らせると、シート間の関連すらわからないドキュメントを作る人間には、DB設計なんて無理です。

287 :NAME IS NULL:2023/07/08(土) 14:05:38.11 ID:???.net
ポータルサイトによくある「検索条件を保存する」って機能。
検索フォームと同じだけのカラムを用意するんじゃなくて、
JSON型のカラムに詰め込むやり方でも問題ないよね?

288 :NAME IS NULL:2023/07/08(土) 17:53:16.96 ID:???.net
問題ないかどうかはデータの使い道次第
まあ要件次第と同じだなw

289 :NAME IS NULL:2023/07/08(土) 18:51:20.51 ID:???.net
あれほど要件定義をしろと言われたのに・・・

290 :NAME IS NULL:2023/07/08(土) 19:43:28.12 ID:???.net
でもまぁここで考慮する必要があるのはそのフォーム定義情報の内部を検索に用いたり
部分的に更新したりする必要があるかどうかくらい。
それがなければjsonでまとめても問題ないんじゃね。

291 :NAME IS NULL:2023/07/08(土) 22:36:44.73 ID:???.net
顧客のふわっとした要望からいきなり特定の実装方法に飛びつきすぎ

「問題ないよね?」なんて聞く前に
どういう選択肢があってそれぞれメリットデメリットは何かくらいは考えよう
その上で状況に一番適切と思われる選択肢を選ぶのが設計というもの

292 :NAME IS NULL:2023/07/10(月) 06:09:15.71 ID:???.net
>>290
「検索条件を保存する」って要件にその懸念はおかしくね?
どういう想定したら、検索条件を再検索するんだ?
部分的に更新にしても、検索フォームに反映した後に再保存するだけでは?

なんか無理やり難癖つけて答える気がないようにしか見えない

293 :NAME IS NULL:2023/07/10(月) 07:51:03.23 ID:???.net
>>292
>どういう想定したら、検索条件を再検索するんだ?
>部分的に更新にしても、検索フォームに反映した後に再保存するだけでは?

逆にあれだけの説明からそのへんの有り無しを断言しようもないと思うが。
俺からすると「なんでそこ勝手に決めつけちゃうの?」と思う。

>なんか無理やり難癖つけて答える気がないようにしか見えない

難癖に見えるかねぇ?
それに、その条件次第でjsonで問題ないとちゃんと回答してるんだが?

294 :NAME IS NULL:2023/07/10(月) 09:32:22.15 ID:???.net
>>293
与えられた材料で検討するのが要件定義だろ
本人がそれ以上言ってこないんだから決めつけるしかない

「◯◯したいのですがどうすれば良いですか?」→Aにしろ
「いえ、Aだと無理です。××も必要になります」→Bにしろ

みたいなやりとりでいいんだよ。仕事じゃないんだから

295 :NAME IS NULL:2023/07/10(月) 09:33:50.08 ID:???.net
条件次第とかふわっとしすぎなんだよ。優柔不断かよ
単なる便所の落書きで会社みたいな要求するなよ

296 :NAME IS NULL:2023/07/10(月) 10:47:09.23 ID:???.net
読み手が内容を解釈できるレベルですらなければ何を言っても無駄だね
仕事ならすぐ違う人間に交代させられるんだけど

297 :NAME IS NULL:2023/07/10(月) 11:31:31.40 ID:???.net
>>292
>どういう想定したら、検索条件を再検索するんだ?
ポータルサイトによくある「検索条件を保存する」って機能で保存された検索条件が検索されてないとでも思ってるの?
むしろどういう想定してるんだ?

>部分的に更新にしても、検索フォームに反映した後に再保存するだけでは?
インタラクティブに1件ずつ再保存する以外に更新されることが無いなら良いんじゃね?

例えば仕様変更によって保存された検索条件とフォームとの互換性がなくなる場合
データを更新しないならアプリ側に異なるバージョン間での互換性を保つ機能が必要になる
そのためには各バージョンのスキーマを定義して参照できるようにしておかないとすぐ破綻する
(一般的にシリアライズフォーマットのschema evolution対応と呼ばれる類のもの)

アプリ側で対応するのが面倒ならデータを更新するしかないが
DBMSが対応してる部分更新の範囲でなければ単純なSQLでは対応できないから
1件ずつデリシアライズして変更して再シリアライズする専用の更新プログラムを用意することになる

298 :NAME IS NULL:2023/07/10(月) 11:34:34.18 ID:???.net
要はJSONを1つの文字列(もしくはバイナリ)データとして扱うのみで
DBレイヤーでは”将来を含めてJSONの中身を構造化データとしては一切扱わない”なら大きな問題ないということ
一部でも構造化データとして扱う必要があるならトレードオフの判断が必要

ユースケース(CRUD)とデータ(中身と構造)からそれを判断可能にするのが要件なんだが
「検索条件を保存する」というふわっとした要望ではその判断が不可能
だから要件と呼べるものではない

要件定義をしろって言われる理由が少しは分かってもらえるといいんだが

299 :NAME IS NULL:2023/07/10(月) 14:22:15.99 ID:???.net
ポータルサイトによくある「検索条件を保存する」って機能。
検索フォームと同じだけのカラムを用意するんじゃなくて、
JSON型のカラムに詰め込むやり方でも問題ないよね?

[ChatGPT]
はい、JSON型のカラムに検索条件を詰め込む方法は、ポータルサイトでの検索条件保存機能として一般的な手法の一つです。この方法を使用することで、検索条件のデータを1つのフィールドにまとめて保存し、後で必要なときに取り出すことができます。

JSON型のカラムに検索条件を保存する場合、以下のような利点があります。

1. 柔軟性: JSON型のカラムは、異なる検索条件のセットを保存できます。たとえば、検索フォームに追加された新しいフィールドやオプションがあっても、データベーススキーマの変更が不要です。

2. シンプルさ: 検索条件を1つのフィールドにまとめることで、データベーステーブルの構造がシンプルになります。これにより、テーブルの設計やクエリの作成が容易になります。

3. 拡張性: JSON型のカラムは、必要に応じて追加の情報を含めることができます。たとえば、保存された検索条件にタイトルや作成者の情報を含めることもできます。

ただし、注意点もあります。

1. 検索条件の検索効率: JSON型のカラムに保存されたデータは、データベース内での検索やフィルタリングが難しくなる場合があります。特定の検索条件でデータを絞り込む必要がある場合は、適切なインデックスを作成するか、別途テーブルを使用して条件を保存する方法を検討することが重要です。

2. データの整合性: JSON型のカラムに保存されたデータは、データベースがその内容を理解することはありません。そのため、データの整合性やバリデーションを確保するための追加の処理や制約が必要になる場合があります。

以上が、JSON型のカラムに検索条件を保存する方法の一般的な考え方です。具体的な実装やデータベースの設計には、使用しているデータベースシステムやアプリケーションの要件に応じて適切な対策を行う必要があります。

300 :NAME IS NULL:2023/07/10(月) 14:23:12.68 ID:???.net
ポータルサイトによくある「検索条件を保存する」って機能。
検索フォームと同じだけのカラムを用意するんじゃなくて、
JSON型のカラムに詰め込むやり方だと問題あるよね?

[ChatGPT]
JSON型のカラムに検索条件を保存する方法は、一般的には適切な方法ではありません。以下に、JSON型のカラムに検索条件を保存することに関連する問題点をいくつか挙げます。

1. 検索条件の構造変更の難しさ: JSON型のカラムに検索条件を保存すると、検索条件の変更や追加が困難になります。検索条件が単一のフィールドにまとめられるため、個々の条件を独立して変更することができません。検索条件の修正や特定の条件を削除する場合には、JSONを解析して変更する必要があります。

2. インデックスの効率性の低下: 検索クエリを実行する際に、JSON型のカラムに含まれるデータを解析する必要があります。データの解析は処理コストが高く、パフォーマンスに影響を与える可能性があります。一方、各検索条件を個別のカラムとして保持すれば、データベースのインデックスを最適に活用して高速な検索が可能になります。

3. クエリの複雑性と可読性の低下: JSON型のカラムに検索条件が格納されている場合、検索クエリの作成が複雑になります。クエリ内でJSONの操作や条件の解析を行う必要があり、可読性が低下します。また、JSON内に格納されたデータの形式によっては、検索条件の抽出や比較が困難になる場合があります。

以上の理由から、検索条件を保存する場合は、各検索条件を個別のカラムに分割して保存することをおすすめします。これにより、データの構造変更の柔軟性やクエリの効率性、可読性が向上し、より効果的な検索が可能になります。

301 :NAME IS NULL:2023/07/10(月) 21:35:56.01 ID:???.net
「◯◯したいのですがどうすれば良いですか?」→Aにしろ
「Aなんて無理じゃないですか!××も必要なんですよ!!!」

302 :NAME IS NULL:2023/07/10(月) 22:31:49.16 ID:???.net
ChatGPTなかなかの忖度力だな

303 :NAME IS NULL:2023/07/10(月) 22:32:57.43 ID:XOkYXFwl.net
>>287
安易にJSON型にするとなんでもありになるから注意しろよ

304 :NAME IS NULL:2023/07/10(月) 22:35:20.00 ID:XOkYXFwl.net
>>302
複雑な入れ子になるだけだからな。

305 :NAME IS NULL:2023/07/13(木) 16:20:13.12 ID:???.net
TalkにはDB板なかったw

306 :NAME IS NULL:2023/07/13(木) 17:51:47.34 ID:???.net
手作業でコピペしているんだろうな

307 :NAME IS NULL:2023/07/23(日) 17:41:30.01 ID:???.net
じゃあマイナンバーをキーにしちゃいけない理由とやらを聞こうか。

308 :NAME IS NULL:2023/07/23(日) 21:29:06.23 ID:???.net
プライマリキーのことをキーと呼んでる?

309 :NAME IS NULL:2023/07/23(日) 21:36:47.88 ID:???.net
マイナンバーをプライマリキーにする話がPythonスレ出たのでこっちに移動
https://mevius.5ch.net/test/read.cgi/tech/1677856680/601-618

A: マイナンバーをプライマリーキーにすれば95%くらい解決する話
B: マイナンバーをプライマリキーにしたらダメだよ
C: マイナンバーに紐付くべき情報を保持するテーブルでマイナンバーをキーにするのは何もおかしなことはない
B: マイナンバーを発行する機構のシステムでもアクセスキーを持つ情報保有機関のシステムでもそんな設計したらダメだよ

310 :NAME IS NULL:2023/07/23(日) 21:39:48.47 ID:???.net
B:詳しく知りたければDB設計スレにでもどうぞ

笑った

311 :NAME IS NULL:2023/07/23(日) 21:48:47.24 ID:lgEmBl7h.net
個人番号を自分たちで作っているなら主キーになるものがあってもいい

312 :NAME IS NULL:2023/07/23(日) 21:50:06.71 ID:???.net
>マイナンバーに紐付くべき情報を保持するテーブルでマイナンバーをキーにするのは何もおかしなことはない。

漏洩したマイナンバーをハッカーがRDBで管理するのに
マイナンバーをプライマリキーにするみたいな非合法な用途なら何もおかしくないんだが
合法な用途だとマイナンバーをプライマリキーにしたいテーブル自体がまず存在しない
一番近いのは失効リストだけどそれもマイナンバーをプライマリキーにはしない

313 :NAME IS NULL:2023/07/23(日) 21:56:41.72 ID:???.net
同姓同名の人がいるような住所録で、マイナンバーをキーにして区別する何て使い方はないんだろうか (ふと思いつきw)

314 :NAME IS NULL:2023/07/23(日) 22:16:01.72 ID:???.net
>>308
プライマリキーと候補キーに本質的な違いはないからね。

315 :NAME IS NULL:2023/07/23(日) 22:21:59.13 ID:???.net
>>312
>合法な用途だとマイナンバーをプライマリキーにしたいテーブル自体がまず存在しない

存在しないと言い切る理由がわからんな。
例えば、マイナンバーを発行した日付を記録する必要があったとしたらそのテーブルのキーは何にする?

316 :NAME IS NULL:2023/07/23(日) 22:40:55.09 ID:???.net
>>315
>例えば、マイナンバーを発行した日付を記録する必要があったとしたらそのテーブルのキーは何にする?
マイナンバーを発行した日付を記録する必要があるのはマイナンバーを発行する機構だけなので
発行日付を記録するテーブルのキーはマイナンバー発行処理のID
(発行処理のIDが発行依頼のIDから派生する可能性はある)

あと前提知識がわからないから書いておくけど
マイナンバーの発行は市町村からの依頼を受けて地方公共団体情報システム機構が行うもので
現状の個人用マイナンバーはハッシュ関数に住民票コード11桁とソルト的なものを渡して生成した11桁と1桁のチェックディジットを足したもの
マイナンバー変更時は同じ住民票コードからソルト的なものを変更して別のマイナンバーを生成する
(住民票コードを変更してもマイナンバーは変更されないので番号間の紐付けはDB内のマッピングのみ)

317 :NAME IS NULL:2023/07/23(日) 22:51:44.11 ID:???.net
>発行日付を記録するテーブルのキーはマイナンバー発行処理のID

マイナンバーからマイナンバー発行処理のIDを求めるのはどうするんだろう

318 :NAME IS NULL:2023/07/23(日) 23:07:44.19 ID:???.net
>>317
(発行処理ID, …, マイナンバー, …, 発行日付)

SELECT 発行処理ID FROM table WHERE マイナンバー = my_number

319 :NAME IS NULL:2023/07/23(日) 23:08:36.59 ID:???.net
マイナンバー特有のシステム的な事情はともかくとして
チェックディジットを含むような外部生成コードをPKにして許されるのはものすごく特殊な状況
値の更新やフォーマット変更時の影響範囲が大きくなりすぎるから

よく言われるISBNやJANコードをプライマリキーにする是非と同じ話
ものすごく短期間だけ使うDBだったり個人が趣味で使うDBだったり
一般的な業務システムに求められる信頼性や保守性が明らかに不要であれば別に構わない

320 :NAME IS NULL:2023/07/23(日) 23:20:17.23 ID:???.net
>>318
マイナンバーに対する発行処理IDを一意に保証するには結局マイナンバーを一意キーにするしかないが。
UNIQUE NOT NULL じゃなくてただの UNIQUE はプライマリキーと違うとか言っちゃう?

321 :NAME IS NULL:2023/07/23(日) 23:32:26.06 ID:???.net
普通に考えたらマイナンバーを主キーにしたら駄目だろう..
外部IFする場面ではあると思うけどね

322 :NAME IS NULL:2023/07/23(日) 23:59:56.44 ID:???.net
>>320
関数従属性の方向が違う

それにマイナンバーにユニーク制約を付与するんじゃなくて
マイナンバーを構成する11桁で一意性を担保しないと駄目

んでUNIQUE NOT NULLでもプライマリキーとは違う
例えばマイナンバーの桁数が15桁に変更になって14桁部分での一意性を担保する仕様に変わった場合
マイナンバーがプライマリキーならテーブル全部作り直しで
外部キーとして参照してるテーブルもすべてデータ更新が必要
UNIQUE NOT NULLなカラムなら1テーブルだけ変更すればいい

UNIQUE NOT NULLなカラムを外部キーで使ってたら駄目だけど
マイナンバーみたいなのではまずやらない

323 :NAME IS NULL:2023/07/24(月) 00:03:11.03 ID:???.net
あと
UNIQUE NOT NULLは更新可能
プライマリキーは更新不可(少なくともSQL標準では)

324 :NAME IS NULL:2023/07/24(月) 00:18:34.25 ID:???.net
>>313
法令で定められた事務以外でマイナンバーを利用するのは法律違反
マイナンバーを利用する事務に従事する人が勝手に目的外で利用してたら刑事罰

325 :NAME IS NULL:2023/07/24(月) 08:11:00.20 ID:???.net
>>322
>関数従属性の方向が違う

違わんよ。
発行処理ID→発行日付 と 発行処理ID→ マイナンバー があったとしても
もともとの マイナンバー→発行日付 という関数従属を表現するなら
マイナンバー→発行処理ID→発行日付 となるはず。
発行処理ID→ マイナンバー かつ マイナンバー→発行処理ID なら
発行処理IDが候補キーの場合同時に マイナンバーも候補キーになる。

>マイナンバーを構成する11桁で一意性を担保しないと駄目

なるほど、これは理解した。

>例えばマイナンバーの桁数が15桁に変更になって14桁部分での一意性を担保する仕様に変わった場合
>マイナンバーがプライマリキーならテーブル全部作り直しで
>外部キーとして参照してるテーブルもすべてデータ更新が必要

型を変更しなければならないというならそこは本質的な問題じゃないだろう。
それを別にするなら作り直しなんて必要ないと思うが。
11桁のマイナンバーと14桁のマイナンバーは別のナンバーなわけだし。
そこを、個人とマイナンバーを混同しているから個人に対するマイナンバーが変更になったら
全部洗い替えしなきゃならないという発想につなっている気がするな。

326 :NAME IS NULL:2023/07/25(火) 22:28:00.10 ID:???.net
>>325
発行処理においてはマイナンバーは導出項目なんだよ
一意性のある導出項目が物理的に保存されてれば二次識別子として利用可能だけど
モデリング上は候補キーにもならないしプライマリキーにもならない
逆にマイナンバーが何に関数従属しているかを考えれば発行処理で管理すべきデータが見えてくる

プライマリキーの型を変更しようとすると
参照テーブル含め全部作り直しが必要になってしまうという話は
ユニークであっても外部生成コードをプライマリキーしちゃダメだよっていう一般的な話
こっちは教科書的なものであればほぼ必ず書いてあることだからわかりやすいと思うんだけど

327 :NAME IS NULL:2023/07/26(水) 03:48:37.34 ID:???.net
雑談レベルなんですけど、テーブルの垂直分割ってどのくらいやればいいんですかね。
1..n みたいに分割するしかない場合は除くとして、つまり 1..0 or 1..1 の場合。

理屈で言えば分割すれば全ての列をnot nullに出来る。
でも実際は分割するとちょっとデータを取るのにもjoinしないといけないし、
データをinsert updateする時は主データのテーブルをselectする必要がある(これは作り方次第だけど)

どっちにしてもSQLが長くなって面倒なら、分割せずに1テーブルにカラム数十個設定すりゃいいんじゃないかと思ったりもして
どう設計すればいいんだ

328 :NAME IS NULL:2023/07/26(水) 07:43:43.18 ID:???.net
>>326
導出項目だからといって絶対に導出に用いた元データをキーとして使わなければならないということはないな。
免許証番号なんかも都道府県や犯行粘土などいろいろな要素から構成されているけど、常にそれらをキーとするのは
大変だし、そもそもそれができるのは発行したシステムだけであってそのコードを利用するだけのシステム側では無理。
一般的に言えばサロゲートキーだな。

>ユニークであっても外部生成コードをプライマリキーしちゃダメだよっていう一般的な話

こっちはナチュラルキーだな。どの教科書にどう書いてある話なんだろう。

329 :NAME IS NULL:2023/07/26(水) 17:40:30.47 ID:DbHY5DQp.net
ナチュラルキーにこだわるデータモデルは、だいたいうまくいかない。

330 :NAME IS NULL:2023/07/26(水) 17:41:56.64 ID:DbHY5DQp.net
>>328
アメリカの有名人にナチュラルキー派がいる。
理屈をこねくり回しているだけのジジイ。

331 :NAME IS NULL:2023/07/26(水) 23:29:46.87 ID:???.net
ナチュラルキーをそのまま広範囲に使うかサロゲートキーに置き換えて局所化するかだけの違い。
どっちにしろナチュラルキーを意識しなけりゃならんことは変わらん。
サロゲートキー振ったから後から変更があっても大丈夫とかいってそのへんの分析を疎かにしていると事故る。

332 :NAME IS NULL:2023/07/26(水) 23:37:48.78 ID:???.net
>>328
導出に用いた元データをプライマリキーにするかどうかはまた別の話
値を導出する処理を管理するテーブルのプライマリキーに導出した結果の値を使うのが間違ってるよという話
向きが逆

>こっちはナチュラルキーだな。
違う
ユニークな外部生成コードは基本的にナチュラルキーだけどその逆は成り立たない
ナチュラルキーは状況によってプライマリキーとして使う場合もあるけど
外部生成コードはプライマリキーとして使わない(保守性を考えなくて良い使い捨てのシステムは除く)

333 :NAME IS NULL:2023/07/26(水) 23:54:56.22 ID:???.net
>>327
別途切り出して管理することにどのくらい意味があるかによるので
都度メリット・デメリットを比較して判断する

334 :NAME IS NULL:2023/07/27(木) 00:07:28.15 ID:???.net
>>332
>値を導出する処理を管理するテーブルのプライマリキーに導出した結果の値を使うのが間違ってるよという話

なんで「値を導出する処理を管理するテーブル」に限定する?そんな話はしtないが。

>ユニークな外部生成コードは基本的にナチュラルキーだけどその逆は成り立たない
>ナチュラルキーは状況によってプライマリキーとして使う場合もあるけど

ユニークな外部生成コードは基本的にナチュラルキーで状況によってプライマリキーとして使うと言っているのに

>外部生成コードはプライマリキーとして使わない(保守性を考えなくて良い使い捨てのシステムは除く)

なんでそういう結論になるのか飛躍しすぎてよくわからんな。

335 :NAME IS NULL:2023/07/27(木) 00:41:56.20 ID:???.net
>>334
>なんで「値を導出する処理を管理するテーブル」に限定する?
君が「マイナンバーを発行した日付を記録する必要があったとしたら」という話をしたからだよ
それを記録する必要があるのは地方公共団体情報システム機構でマイナンバー生成を管理する箇所だけだから

市役所の住基テーブルとかでマイナンバーを登録した日付だったり
更新した日付を記録したりはするだろうけどそういうのは発行した日付とは別だし
すでに別のキーが存在しているところに情報を足すわけなので
マイナンバーをプライマリキーにしようと考えるようなユースケースがない

>ユニークな外部生成コードは基本的にナチュラルキーで状況によってプライマリキーとして使うと言っているのに
包含関係がわからない?
ナチュラルキーは外部生成コード以外の場合が多々あるということ

336 :NAME IS NULL:2023/07/27(木) 07:48:27.16 ID:???.net
>>335
>君が「マイナンバーを発行した日付を記録する必要があったとしたら」という話をしたからだよ

重機コードなどを基に導出する話をしていたのかと思ったが、この日付の例で導出云々は何の関係がある?
単に生成された値を格納するだけの話じゃん。

>ナチュラルキーは外部生成コード以外の場合が多々あるということ

外部生成コードがナチュラルキーだとは書いたが、その逆が真じゃないのはそりゃそうだな。
それを「違う」と言ったのは>>332

んで、外部生成コードをプライマリキーに使えるかどうかという話にそれがどう関係する?

337 :NAME IS NULL:2023/07/27(木) 09:28:01.70 ID:???.net
>>333
まあそうですよね…
趣味のコードなので、今度は切り出してやってみます

338 :NAME IS NULL:2023/07/27(木) 13:27:43.60 ID:???.net
お前らマイナンバーに詳しいんだな

なんの話をしてるのかわからんから、
だれかちょっと要件まとめて、議論の前提を整備してくれ

外部とか内部とか生成コードとか、ちゃんと定義合わせてくれ

339 :NAME IS NULL:2023/07/27(木) 19:12:18.27 ID:qcoOxezn.net
個人番号はマイナンバーカードを発行したときに住んでいた自治体がわかる番号なんだけどな。

340 :NAME IS NULL:2023/07/27(木) 22:59:19.96 ID:???.net
んなわけあるかいっ

341 :NAME IS NULL:2023/07/27(木) 23:30:20.20 ID:???.net
マイナンバーのシステム的な概要はこれ見るといいよ
https://www.moj.go.jp/content/001154671.pdf

342 :NAME IS NULL:2023/07/28(金) 03:58:21.09 ID:aeYE4ilU.net
>>340
個人情報保護では知らないとまずい話だよ?

343 :NAME IS NULL:2023/07/28(金) 16:18:41.46 ID:???.net
マイナンバーカード発行時にマイナンバーが作られると思ってるやつがいるんだな

さすがにこのレベルは一般常識だから
ボラクル君だけが例外だと思いたい

344 :NAME IS NULL:2023/07/28(金) 17:58:34.02 ID:???.net
既に奴隷どもには背番号が打たれているのか

345 :NAME IS NULL:2023/07/29(土) 13:07:14.22 ID:???.net
>マイナンバーをプライマリキーにしようと考えるようなユースケースがない
これに尽きる
そもそもマイナンバー自体が異なる組織のデータベースを横串で刺すことを目的とした二次的な識別子

346 :NAME IS NULL:2023/07/29(土) 14:41:20.36 ID:???.net
マイナンバーはもちろん免許証番号やパスポートの旅券番号などをプライマリキーとして使うケースはない
もし使ってるとしたらそれは初歩的な設計ミス

347 :NAME IS NULL:2023/07/29(土) 17:41:14.10 ID:???.net
>>245
>>マイナンバーをプライマリキーにしようと考えるようなユースケースがない
>これに尽きる

それは必要ないって話で、使っちゃダメという話とは別だな。

>そもそもマイナンバー自体が異なる組織のデータベースを横串で刺すことを目的とした二次的な識別子

二次的な識別子だからプライマリキーには使うなという話なのかな?

>>246
>もし使ってるとしたらそれは初歩的な設計ミス

理由をあげて説明しようよ。設計スレなんだし。

348 :NAME IS NULL:2023/07/29(土) 17:50:43.23 ID:???.net
マイナンバーや免許証番号や旅券番号がからむ案件なら、
何らかの扱いはしなければいけないと思う、その上で、
プライマリキーにしてはいけないと言う理由はなんだろう

349 :NAME IS NULL:2023/07/29(土) 18:25:17.34 ID:8+fU5+47.net
>>343
個人番号とマイナンバーカードは、もともとセットで導入するつもりだったもの。

だからいまの政府も先に進むことはできても、前に戻すことはできない。

350 :NAME IS NULL:2023/07/29(土) 18:26:05.30 ID:8+fU5+47.net
>>343
ぼったり価格はAWS社だろw

351 :NAME IS NULL:2023/07/29(土) 18:32:44.35 ID:8+fU5+47.net
>>348
テストなどでデータをマスクすることがあるから、主キー列に重要な業務項目値を使うのはデメリットがある。

単にユニークになるからという理由で主キー列の候補にすると、サブエンティティなどで複合主キーを使うことになる。

ちなみにNTT東西、NTTドコモなどは、主キーは、サロゲートキーを使う慣習が大昔からある。

352 :NAME IS NULL:2023/07/29(土) 20:20:14.84 ID:???.net
そこはナチュラルキーをそのまま使うかサルゲートキーに置き換えるか得失を踏まえて判断する
一般的な話だな。>>331あたりにも書いたが。

353 :NAME IS NULL:2023/07/29(土) 22:05:59.51 ID:???.net
>>348
逆にプライマリキーにするべきケースがあると思ってるの?
データベース設計したことある?

354 :NAME IS NULL:2023/07/29(土) 23:03:53.43 ID:???.net
しないと言う理由を簡潔に語ってくれれば解決
したことあるか、とは違う

355 :NAME IS NULL:2023/07/29(土) 23:05:08.20 ID:???.net
まだやってたのか

356 :NAME IS NULL:2023/07/30(日) 08:35:01.21 ID:???.net
あいかわらず「必要ない」と「やってはならない」の区別がついてない人が議論をひっかきまわす

357 :NAME IS NULL:2023/07/30(日) 18:19:56.93 ID:???.net
文脈を一切理解しようとしないのな
マイナンバーをプライマリキーにして頑張ってくれ

358 :NAME IS NULL:2023/07/30(日) 18:46:46.23 ID:???.net
プライマリキーにするべきでない理由を説明すればいいだけなのにそれは書かずに文脈を理解しろと言われてもな。
ちなみにどこのどういう文脈を理解しろと言っているんだろう。

359 :NAME IS NULL:2023/07/30(日) 20:55:27.77 ID:KmsLbO8H.net
>>357
現実にはそんなユースケースはないから頑張りようもないぞ

360 :NAME IS NULL:2023/07/30(日) 20:59:05.08 ID:eUfdlklX.net
>>358
教えて君はユースケースを先に理解した方がいいんじゃね

361 :NAME IS NULL:2023/07/30(日) 21:09:52.61 ID:???.net
ここには理解している人が一人もいないと言うことが分かりました?

362 :NAME IS NULL:2023/07/30(日) 21:28:02.10 ID:???.net
>>359
そう言われればそうだったw

363 :NAME IS NULL:2023/07/30(日) 21:37:29.99 ID:???.net
>>351
セキュリティやプライバシー侵害につながるかどうかは
プライマリキー選定要件の一つではあるんだけど
これにひっかかるような項目はそれ以前の条件で基本的に弾かれる

364 :NAME IS NULL:2023/07/30(日) 21:53:44.23 ID:???.net
>>380
あるなら説明すりゃいいってだけで。
それもせずにこうのらりくらりやるのは結局説明できないんだろう。

365 :NAME IS NULL:2023/07/30(日) 22:04:00.11 ID:???.net
リンク間違えたか。
>>360
あんたが知ってる範囲のユースケースでは必要ないとしてもそれは「すべきではない」理由にはならんのよ。何度も書くけど。
そんな初歩の論理すら理解できないのかね。

366 :NAME IS NULL:2023/07/30(日) 22:04:57.72 ID:???.net
>>363
あらゆる設計判断はトレードオフの判断だからさ
セキュリティやプライバシー侵害というデメリットを大きく上回るメリットがあれば許容されるんじゃね?
とは言っても公共系でマイナンバーをプライマリキーにしてたら相当やばいだろうけど

>>364
アンカ間違えてんぞ

367 :NAME IS NULL:2023/07/30(日) 22:23:26.73 ID:???.net
時を掛けるDBマン

368 :NAME IS NULL:2023/07/30(日) 22:29:39.51 ID:???.net
>>365
マイナンバーは法律で許可された特定業務以外でDB管理したら犯罪なのでユースケースは超限定されてる
だから登場人物と仕組みを理解してればユースケースがないこともわかる

ただ俺がユースケースを先に理解したほうがいいんじゃねと書いたのは知識として現実のユースケースを理解しろという意味ではなくどういうユースケースであればマイナンバーをプライマリキーにするのが妥当なのかを
自分の頭でまず考えたほうがいいよって意味だったんだけどね

いずれにしろユースケースの理解なしにプライマリキーの最終的な妥当性なんて判断できないでしょ

369 :NAME IS NULL:2023/07/30(日) 22:47:33.70 ID:???.net
それが「すべきで無い」と言う理由なの?

370 :NAME IS NULL:2023/07/30(日) 22:50:42.19 ID:???.net
>>368
>ただ俺がユースケースを先に理解したほうがいいんじゃねと書いたのは知識として現実のユースケースを理解しろという意味ではなくどういうユースケースであればマイナンバーをプライマリキーにするのが妥当なのかを
>自分の頭でまず考えたほうがいいよって意味だったんだけどね
.
ごくごく単純な話だと思うけどね。
一般に A → B という関数従属性があるときにA をキーとするテーブルで表現するのは普通のこと。
それを、A をキーにすべきではない場合があるとすればそれはどういう条件なのか。

法律の条文は知らんが、まさか「マイナンバーをプライマリキーに使ってはならない」と書いてあるわけじゃあるまい。

371 :NAME IS NULL:2023/07/30(日) 23:19:14.19 ID:TMFq46KH.net
開始日、終了日というカラムが存在するテーブルがあるとします。
「期間指定なし」を実現したい場合、どうしますか?

A:期間指定なし用のカラムを追加する(is_unlimitedが1なら無制限になるとか)
B:開始日・終了日のカラムを「0000-00-00」(またはNULL)にする

という2パターンを思い浮かんだのですが、どちらがいいですか?
またはCパターンがあれば教えてください。

372 :NAME IS NULL:2023/07/30(日) 23:21:22.72 ID:???.net
条文読んでみた。

行政手続における特定の個人を識別するための番号の利用等に関する法律
第二条
10 この法律において「個人番号利用事務」とは、行政機関、地方公共団体、独立行政法人等その他の行政事務を処理する者が第九条第一項から第三項までの規定によりその保有する特定個人情報ファイルにおいて個人情報を効率的に検索し、及び管理するために必要な限度で個人番号を利用して処理する事務をいう。
第三条 
四 個人番号を用いて収集され、又は整理された個人情報が法令に定められた範囲を超えて利用され、又は漏えいすることがないよう、その管理の適正を確保すること。

「検索」や「整理」というのはキーとして用いることを想定しているように思えるが。

373 :NAME IS NULL:2023/07/30(日) 23:25:24.47 ID:rkme/cvf.net
ナチュラルキーは運用・保守でデータを修正するときに面倒なことになる。

データの整合性は制約ではなく、アプリケーションが担保すればいい話。

理屈しか知らない経験不足のやつは、教科書に書いてあるようなことしか言わないw

374 :NAME IS NULL:2023/07/31(月) 01:24:43.95 ID:???.net
複数のシステムから使うような基幹DBで、1アプリのバグで整合性の崩れたデータが大量に発生したらとは考えないのかね
そんなことは起こらないとか思ってたら、それこそ経験不足だな

375 :NAME IS NULL:2023/07/31(月) 01:28:49.74 ID:???.net
>>371
一般的にはBかな
開始日終了日はミドルウェアが取りうる範囲で事実上無期限の範囲を定義するパターンをよく見る

業務要件でAの方が良い場合もあればそっちでもいい

もっといいC案があるんかもしれん

現実の複雑さの前に教科書通りにやっても答えは出ない事が多い
何がベストなのかを考えるのがDB設計や

376 :NAME IS NULL:2023/07/31(月) 02:19:45.37 ID:???.net
>>371
「期間指定なし」が
開始日・終了日という期間を指定する概念が当てはまらない種別のレコードを示すものなのか
期間がまだ指定されてない(未指定)のレコードを示すものなのか

前者なら種別を示すカラムを追加して開始日・終了日をNULLにする(A案)
もしくは種別を示すカラムを追加しつつサブタイピング
後者なら開始日・終了日をNULL(B案)

指定された期間の使われ方によってはもっと違うバリエーションがあるので
これも結論はユースケース次第

377 :NAME IS NULL:2023/07/31(月) 02:21:45.92 ID:???.net
>>372
>「検索」や「整理」というのはキーとして用いることを想定しているように思えるが
んなわけあるかw

378 :NAME IS NULL:2023/07/31(月) 07:23:47.10 ID:???.net
>>371
そこに期限がないことを示すならNULLが素直だが検索がやや面倒になるので
他に問題が起こらないならば開始日0000終了日9999という手もある。

379 :NAME IS NULL:2023/07/31(月) 08:08:15.76 ID:???.net
>>377
そんな断言できるものなのか?

380 :NAME IS NULL:2023/07/31(月) 10:36:33.09 ID:???.net
>>379
お前のキーの定義ゆるゆる過ぎるやろ
そら議論にならんわ

381 :371:2023/07/31(月) 15:18:31.82 ID:???.net
みなさんアドバイスありがとうございます
範囲検索で必ずヒットさせたいので、
開始日(1000-01-01)、終了日(9999-12-31)のようにします
そして表示上は「期間指定なし」とします
こうすれば余計なカラムを追加せずに目的が実現できそうですね

382 :NAME IS NULL:2023/07/31(月) 15:32:40.41 ID:???.net
終了日に9999は使わない方が良いと思う

383 :NAME IS NULL:2023/07/31(月) 15:38:26.72 ID:???.net
終了日を指定しなければinfinite future扱いとするのはよくある話だけど
開始日を指定しなければinfinite past扱いとするのは聞いてことがないな
過去に遡らせる必要があることがないから

384 :371:2023/07/31(月) 15:53:50.88 ID:???.net
それではこういうのどうでしょう?(MySQLです)

SELECT
*,
IF (date_s IS NULL AND date_e IS NULL, 1, 2) AS is_unlimited
FROM `posts`
HAVING (date_s <= '2023-07-01' AND date_e >= '2023-07-31') OR is_unlimited=1

date_s(開始日)、date_e(終了日)がともにNULLならis_unlimited(無制限)が1にし、
そうでない場合は2にしてから、HAVINGの条件に加えるとか

385 :NAME IS NULL:2023/07/31(月) 15:59:51.42 ID:MTLXqlZG.net
>>381
文字データ型を想定しているなら、開始日は意味のある業務日付にして、設計書に明記しろ。
開始日の西暦1000年は、データを見ても誰も意図がわからない。こういうのは登録ミスなんじゃないのかと、未来、必ず言われる。

386 :371:2023/07/31(月) 16:03:56.83 ID:???.net
>>385
なるほど。そこまで考えていませんでした。
じゃ、適当な数値よりもNULLの方がマシですかね。
で、「date_sとdate_eがともにNULLなら期間指定なしとする」」
と設計書に明記すれば迷わない気がします。

387 :NAME IS NULL:2023/07/31(月) 16:05:18.32 ID:MTLXqlZG.net
>>384
開始日と終了日が必要なデータとそうでないデータがあるなら、複数データを同じ入れ物に入れようとしているアンチ正規化のちょっとよろしくない設計なんだが?

388 :371:2023/07/31(月) 16:08:46.81 ID:???.net
>>387
ということは、>>371で書いたA案が正しいのですかね?
B案という意見も多いので、どっちが良いのかわからなくなります

389 :NAME IS NULL:2023/07/31(月) 16:39:20.99 ID:???.net
どの程度の件数が格納されるか不明だけど検索項目になるなら自分ならNULLは許可しない
DB上の期間指定なしと入力可能な期間指定を明確に決めて設計するかな
DB上開始指定なしは0000-01-01、終了指定なしは9999-12-31、入力可能な期間指定は開始は2000-01-01、終了は2999-12-31など

390 :NAME IS NULL:2023/07/31(月) 16:53:35.14 ID:???.net
開始指定なしはビジネスロジック上不明またはメンテ期間以前ってことだろ
前者ならNULLでもいいんじゃないか
3値論理の理想としてる設計だろ

391 :NAME IS NULL:2023/07/31(月) 16:55:12.55 ID:???.net
検索項目にする場合、NULLだと都合が悪いのかな

392 :NAME IS NULL:2023/07/31(月) 17:05:41.13 ID:???.net
開始終了の日付指定無し=両方NULLを設定する
片方だけNULLは都合が悪い=入力時にチェックするで対応
日付範囲指定で抽出=範囲指定で、NULLデータは検索から排除されてる

これで上手く動くと思うけど、ダメなのかな?

393 :NAME IS NULL:2023/07/31(月) 18:32:11.87 ID:???.net
>>392
テーブル上のケースは
A 開始:終了 開始~終了
B 開始:NULL 開始~
C NULL:終了 ~終了
D NULL:NULL 期間なし
例えば日付範囲検索で
開始日以降の条件が発生した場合、開始≦条件の開始日 OR 開始 IS NULL
終了日以前の条件が発生した場合、終了≧条件の終了日 OR 終了 IS NULL
とそれぞれNULLの考慮が必要になるからNULLを持たないほうがいいんじゃない?
というのが自分の考えだわ
後は例えば開始が2023-01-01、終了が2023-12-31となっているデータがある場合に
2022-12-01~2023-03-31って検索した場合、上のデータが対象になるとNULLが混在するデータの場合に
条件も複雑にならないかね?

394 :NAME IS NULL:2023/07/31(月) 18:34:05.22 ID:???.net
質問した人が果たしてそこまで要求してたかどうかは、あやしい

395 :NAME IS NULL:2023/07/31(月) 21:00:40.56 ID:???.net
そういう意味でテーブルに開始・終了日付を持ち、検索時も開始・終了日付を持つ場合を考慮してNULLはないほうがいいと思ってる

396 :NAME IS NULL:2023/07/31(月) 21:33:37.76 ID:???.net
DBにもよるけど検索時のIndexも効かないし
俺ならNULL使わないかな
3000万件から無期限のデータだけ取り出したい場合とかINDEX効かせないと辛いやろ

397 :NAME IS NULL:2023/07/31(月) 21:38:44.77 ID:???.net
3000万件ですか?すごい大規模な案件ですね
そういうのを担当する人が果たしてここで質問するか、
大変興味があります

398 :NAME IS NULL:2023/07/31(月) 21:52:32.04 ID:???.net
・NULLは駄目
・1000-01-01〜9999-12-31のような最小、最大値を入れるのも駄目
・フラグ用のカラムを入れるのも駄目

ならどう設計するのが適切なの?

399 :NAME IS NULL:2023/07/31(月) 22:06:34.28 ID:???.net
絶対にどれがダメなんてことはなくてそれぞれメリットデメリットあるからそれを踏まえて判断すればいい。
条件に関わらず「××は絶対ダメ」という奴がいるかもしれないがそういうのはバカだから無視していい。

400 :NAME IS NULL:2023/07/31(月) 22:08:57.28 ID:???.net
>>396
>3000万件から無期限のデータだけ取り出したい場合
なんでそんなことしたいの?
3000万件から他のインデックス使わずに無期限のデータだけ取り出したい場合があるなら
無期限のデータと有期限のデータは根本的に種類が違うんじゃないの?

401 :NAME IS NULL:2023/07/31(月) 22:19:05.56 ID:???.net
>>396
期限有り無しの二値だとインデックスも効きにくいだろ。よっぽど分布が偏ってない限り。
ビットマップインデックスもこの場合はちょっと違うしなあ。

402 :NAME IS NULL:2023/07/31(月) 22:33:24.14 ID:???.net
二値しかないんだから、アクセス時間の方がかかる
インデックスあまり意味がない

403 :NAME IS NULL:2023/07/31(月) 22:40:21.82 ID:???.net
>>401
インデックスをどうするか以前に
期限の有無が業務上持つ意味をDB設計に反映できてない可能性があるのではという話

よくあるのは通常の単価とキャンペーン単価の管理の違い
前者は開始日(=切替日)しかないが後者は開始日と終了日がある

404 :NAME IS NULL:2023/07/31(月) 22:56:02.47 ID:???.net
本人がいないところで仕様を膨らますのは止めよう

405 :NAME IS NULL:2023/07/31(月) 23:07:24.63 ID:???.net
>>396
>DBにもよるけど検索時のIndexも効かないし
オラクルだけじゃなくて?

406 :NAME IS NULL:2023/07/31(月) 23:14:10.03 ID:???.net
オラクルでも今はNULLをIndexされるようにできるみたいね

407 :NAME IS NULL:2023/07/31(月) 23:16:19.49 ID:???.net
SQLiteは知らないけど
SQL Server, MySQL, PostgresはどれもNULLがIndexingされるので
Oracleも大丈夫なら検索性能という意味ではあまり困らないような気がする

408 :NAME IS NULL:2023/08/01(火) 00:07:30.45 ID:???.net
最近はOracleでもインデックスに含まれるのか知らなかったww勉強不足で申し訳ない

ただBTREE INDEXは魔法じゃないから
データ分布とか検索条件次第ですかね

409 :NAME IS NULL:2023/08/01(火) 08:13:04.34 ID:???.net
>>403
そういうキャンペーン単価を管理するときって、別テーブルにするの?

▽商品テーブル
ID|商品名|価格|登録日|更新日

▽キャンペーンテーブル
ID|商品ID|キャンペーン価格|開始日|終了日

こんな感じ?
でもこれだと商品にキャンペーンがあるかわからないような気が

410 :NAME IS NULL:2023/08/01(火) 09:06:38.95 ID:???.net
単価関連は標準単価とは別にキャンペーン用の単価を登録するテーブルを用意したりするんじゃない

411 :NAME IS NULL:2023/08/01(火) 09:39:35.55 ID:???.net
キャンペーンの設計でいつも迷うのが履歴なんだよな
キャンペーン終了したからって削除すると、購入履歴がおかしくなるし

412 :NAME IS NULL:2023/08/01(火) 10:55:49.31 ID:???.net
削除前提の設計なら履歴に削除するマスタの情報を付与しておけばいいんじゃない
でも普通というか使用されたマスタは削除なんてしないのでは

413 :NAME IS NULL:2023/08/01(火) 11:07:21.76 ID:???.net
購入履歴は購入した各ユーザーの履歴として保存すれば良い

414 :NAME IS NULL:2023/08/01(火) 17:37:59.06 ID:???.net
その履歴が何の履歴でどういう目的で残すものなのかを明らかにすれば設計はおのずと決まると思うが。

415 :NAME IS NULL:2023/08/01(火) 22:27:22.34 ID:???.net
>>409
扱う商品や業種にもよるとおもうけど販売単価は頻繁に変更される場合は
商品名とかを管理する商品マスターには実際の販売単価は入れずに別にテーブルを作る
さらにそれとは別にキャンペーン用の単価を管理するテーブルを作る
(標準販売単価のような商品IDが決まれば一意に決まるような情報なら商品マスター)

適用される単価を割り出すのに2つ以上のテーブルを確認するというのはアプリロジック

>▽商品テーブル
>ID|商品名|価格|登録日|更新日
この設計だと価格を変更したい場合に価格を直接上書きするか商品IDを新しくするかしかなくて普通は困ると思う

416 :NAME IS NULL:2023/08/01(火) 23:26:21.41 ID:???.net
開始日・終了日の件は
SQL標準に組み込まれたtemporal機能のsystem time periodsの実装方法を見ると
終了日だけオープンにしてdatetime型の最大値をセンティネルとして使ってるDBMSが大半のようなので
RDBMS固有の特別事情がなければそれがファーストチョイスでいい気がする

417 :NAME IS NULL:2023/08/02(水) 00:55:16.14 ID:???.net
>>415
>>ID|商品名|価格|登録日|更新日
>この設計だと価格を変更したい場合に価格を直接上書きするか商品IDを新しくするかしかなくて普通は困ると思う
キャンペーンテーブルのほうに引きずられたけどよく考えたら
ID+更新日の複合主キーかそのサロゲートを使えば要件次第では困らないかもね

418 :NAME IS NULL:2023/08/02(水) 13:16:59.94 ID:???.net
価格は適用日に応じた世代を持たせたテーブル作ると楽

419 :NAME IS NULL:2023/08/02(水) 13:32:20.34 ID:???.net
適用日に応じた世代とかイミフw

420 :NAME IS NULL:2023/08/02(水) 13:38:56.67 ID:???.net
実務やってれば分かることなのに

421 :NAME IS NULL:2023/08/02(水) 14:57:10.42 ID:???.net
>>418
それはみんなわかってて
具体的にどういうやり方がいいのかという話だろ

422 :NAME IS NULL:2023/08/02(水) 16:07:55.30 ID:???.net
販売管理の実務やってる奴なんて実際いないんだろ
いるなら具体例出すだろうしでないのが何よりの証拠

423 :NAME IS NULL:2023/08/02(水) 16:15:58.25 ID:???.net
適用日があるなら世代はいらないんじゃねって話かね?

424 :NAME IS NULL:2023/08/03(木) 09:58:26.73 ID:???.net
そもそも適用時に応じて世代ってなんぞ?

425 :NAME IS NULL:2023/08/03(木) 10:00:46.36 ID:???.net
ごめん、思い切りミスった
「適用日に応じた世代ってなんぞ?」だったw

価格が変わる毎にテーブル作るのは非効率に感じるし、
SELECTのSQLがどうなるかわからん

426 :NAME IS NULL:2023/08/03(木) 10:26:49.29 ID:???.net
世代番号列を作るってことじゃないの?
必要になるシーンが浮かばないけど

427 :NAME IS NULL:2023/08/03(木) 11:34:09.40 ID:???.net
ある商品Aがある。通常の単価は100円
10/5は特売日なので80円、それとは別に10/11~15は90円
みたいなケースだと
10/1~4 100円
10/5 80円
10/6~10 100円
10/11~15 90円
10/16~ 100円
みたいになるけどそれぞれの期間を世代とかいってるのか100円でないものだけ世代とか言ってるか意味不明なんだよな
単純に適用日で管理といえばいいと思ってる

428 :NAME IS NULL:2023/08/03(木) 11:50:48.91 ID:???.net
後者を世代と言ってるなら要件定義ミスの原因になりかねないほど日本語が不自由だし、前者でも後者でもやはりいらない。

429 :NAME IS NULL:2023/08/03(木) 13:16:26.10 ID:???.net
価格テーブル作って
ID、価格、開始日、終了日
にしたら世代管理にならないか?って思ったら、>>409に書かれてたw

ほんと言うだけ言って具体例出さないよな

430 :NAME IS NULL:2023/08/03(木) 15:29:58.52 ID:dzanpAeV.net
NULLのカラムを検索結果から除外するSQLなら、そもそもインデックススキャンになるSQLならインデックススキャンになるだろw

431 :NAME IS NULL:2023/08/03(木) 15:33:17.05 ID:dzanpAeV.net
だいたい日付の開始日が設定されていないような状態なら、他のステータス項目で判断できるようなデータモデルじゃないと、クソみたいなSQLだらけになる。

432 :NAME IS NULL:2023/08/03(木) 15:41:34.40 ID:???.net
>>428
それ俺の知ってる言葉の意味と違うから要件定義ミスになっちゃうという話にしか聞こえないぞ
一般的な意味とは違っても現場現場で定着してる語義ってあるからな
自分の知ってる意味と違うならそれを明確化させればいいだけ

433 :NAME IS NULL:2023/08/03(木) 15:43:58.47 ID:???.net
>>429
そういうのを「世代」や「世代管理」とは呼ばないというのが
>>427-428の言いたいことなんじゃないかな

434 :NAME IS NULL:2023/08/03(木) 19:07:02.41 ID:???.net
じゃ、その言いたいことを説明すればいいだけじゃん
他の人は例を出してるのになぜ出さない?

435 :NAME IS NULL:2023/08/03(木) 19:16:30.28 ID:???.net
言葉の問題とかどうでもいいから今回の価格の話だけすればいいと思うんだよな

436 :NAME IS NULL:2023/08/03(木) 21:23:42.18 ID:???.net
>>418がしょうもないこと言うから脱線したけど、元々の相談者の悩みは解決したんじゃないか

437 :NAME IS NULL:2023/08/03(木) 21:47:21.74 ID:???.net
夏休みだとこの程度なんだろうな

438 :NAME IS NULL:2023/08/03(木) 22:01:59.09 ID:???.net
データベーススペシャリスト試験は国語力が試されるからそんなもんだろう。
問題文に書いてあることを読み落としたり逆に書いてない行間を読んだりしたら解けない。

439 :NAME IS NULL:2023/08/03(木) 22:12:43.51 ID:???.net
急にこういう訳わからん事言うのも夏休みだからかなw

440 :NAME IS NULL:2023/08/03(木) 22:25:05.03 ID:???.net
実務やってれば分かるって人は理論とか嫌いだしね

441 :NAME IS NULL:2023/08/03(木) 22:29:26.60 ID:???.net
DBスペシャリストは実践的なDB設計には役立たないんだよ
この1週間の一連の流れだけ見てもわかるよね

442 :NAME IS NULL:2023/08/03(木) 22:37:38.54 ID:???.net
>この1週間の一連の流れだけ見てもわかるよね

KDD爺の「俺が正しい。根拠は言えないけど。」が多かったね。
実務やってりゃ分かる「世代」って結局何だったのか。

443 :NAME IS NULL:2023/08/03(木) 22:42:51.15 ID:???.net
>>440
リレーショナルセオリーだけじゃ主キーさえ選べない

444 :NAME IS NULL:2023/08/03(木) 22:49:53.56 ID:???.net
>>443
そりゃセオリーだけじゃどんなデータを格納するかすら決められないがそういうのとは違う話?

445 :NAME IS NULL:2023/08/03(木) 23:22:21.06 ID:???.net
>>441
>DBスペシャリストは実践的なDB設計には役立たないんだよ

試験受かった人が自分の設計力のなさを自虐しているのならわかるがそうでないならかなり恥ずかしいな。

446 :NAME IS NULL:2023/08/03(木) 23:25:47.44 ID:gShiht3b.net
NULLに何かしらの意味を定義するやつは永久に消えないんだろうな。

自分が作っているシステムの列値がNULLだと、業務的にはこういう状態だとするのは、愚かとしか言いようがない。

インデックスにNULLが含まれないのは、NULLを検索することがイレギュラーだとされているからな。

447 :NAME IS NULL:2023/08/03(木) 23:40:39.58 ID:???.net
MySQLだとNULLにもインデックス使えるみたいですよ

448 :NAME IS NULL:2023/08/04(金) 09:32:08.09 ID:???.net
実務やってりゃ分かるって、昭和じじいの考え方そのものだよね
言語化できないから、それっぽい言葉を使って誤魔化してるだけで
実際は自分もよくわかってないっていうw

449 :NAME IS NULL:2023/08/04(金) 14:02:01.62 ID:???.net
職場で叱責されたからってここで八つ当たりはやめよう

450 :NAME IS NULL:2023/08/04(金) 21:36:10.06 ID:???.net
実務やってりゃ分かるって言ってるのはその実務の現場でシステム開発してるんだろうな。
DB専門家でもないから理論の話や試験資格なんかには激しいアレルギー反応を起こす。

451 :NAME IS NULL:2023/08/04(金) 21:37:52.91 ID:???.net
もう何言いたいのかわかんなくなってきてるぞwww

452 :NAME IS NULL:2023/08/04(金) 22:02:39.80 ID:???.net
オレは理論に詳しいんだ、まで読んだ

453 :NAME IS NULL:2023/08/04(金) 22:26:36.79 ID:???.net
理論に自信があると言っている人は議論ができるが実務言ってる人が議論を拒否する。

454 :NAME IS NULL:2023/08/04(金) 22:31:57.36 ID:???.net
その理論と資格で上司や客とやり合ってみてください

きっと賞賛されますよ
さ、頑張れ!

455 :NAME IS NULL:2023/08/04(金) 22:36:15.71 ID:???.net
>>453
そいつ理論も全く詳しくないのに
なぜそんなにイキリたがるのか不思議

456 :NAME IS NULL:2023/08/04(金) 22:37:09.24 ID:???.net
あ、アンカ間違えたわ
そいつ→君

457 :NAME IS NULL:2023/08/04(金) 22:38:13.39 ID:???.net
>>446
NULLがもともと持ってる意味がある
ボラクル君の大好きなコッド博士も明言してるしSQL標準でも明記されてるよ
終了日がまだ決まってない場合にNULLを入れるのは
NULLがもともと持ってる意味をそのまま使ってるだけ

インデックスにNULLを含めるかどうかはSQL標準的には実装依存ではあるけど
現実的にはSQL標準で定義されてる操作を効率的にやろうとすればインデックスに含めない選択肢はない
だからオラクルもPostgresも間違いを認めて結局修正してる

458 :NAME IS NULL:2023/08/04(金) 22:39:04.45 ID:???.net
煽って教えてもらいたいだけでしょ

459 :NAME IS NULL:2023/08/04(金) 22:40:48.57 ID:???.net
判ってるから、誰も教えてあげないんだろう

460 :NAME IS NULL:2023/08/04(金) 22:51:32.25 ID:???.net
根拠を挙げて議論するというのは仕事でもふつうにやってることだが。
なんで、「実務やってるなら分かる」でそれ以上説明しようとせずにごり押ししようとするのが理解できん。

461 :NAME IS NULL:2023/08/04(金) 23:11:08.11 ID:???.net
>>455
理論に詳しくないかどうかは議論してみれば明らかになると思うが、そもそも
「そいつ」がどう理論に詳しくないのかどの発言で分かったんだろう?

462 :NAME IS NULL:2023/08/05(土) 00:14:46.15 ID:???.net
>>459
判ってるから、誰も教えてあげないんだろう→わかる
実務やってるならわかるはずだから教えない→???

463 :NAME IS NULL:2023/08/05(土) 00:51:29.67 ID:???.net
>>457
大筋同意なんだが、NULLに運用上意味をもたせることが安全かというと、
未定・不明値には別途定義したカテゴリ値を与える方が誤解が生じにくいのも確か

464 :NAME IS NULL:2023/08/05(土) 00:56:48.78 ID:???.net
そこまでいくと、それはサイトのポリシーとか宗教的信念の世界になりそう

465 :NAME IS NULL:2023/08/05(土) 07:40:36.00 ID:???.net
そもそもNULLという設定項目があるんだから、意味はあるだろ

466 :NAME IS NULL:2023/08/05(土) 08:18:50.26 ID:???.net
不存在のNULLは自然だが、それ以外の何らかの値としての意味を持たせようとすると
=NULL の扱いが面倒だな。

467 :NAME IS NULL:2023/08/05(土) 10:59:20.01 ID:???.net
つまるところ、不存在は未定あるいは不明値なのかって話

468 :NAME IS NULL:2023/08/05(土) 11:39:38.98 ID:???.net
不存在ではなく
未設定という設定

469 :NAME IS NULL:2023/08/05(土) 12:46:59.45 ID:???.net
少なくともいまのSQLでは、他の有効な値と同列な「不明値」という一つの値として扱うことはできない。
そのうえで不存在か不明値か未設定かどう解釈するかというのは、振る舞いが同じならどう解釈しようと自由。

470 :NAME IS NULL:2023/08/05(土) 13:00:18.60 ID:???.net
今のSQLって具体的になんという名前のSQLですか?

471 :NAME IS NULL:2023/08/05(土) 13:12:15.17 ID:???.net
NULLは値が存在しないことを示すマーカー
なぜ値が存在しないのかという理由が大きく分けて2種類あって
それが「not applicable」と「unknown at present」
(コッドの言うI-ValuesとA-Values)

前者は>>463の言うように何かしらのカテゴリ値と一緒に使われることが多い
その場合はカラム間の依存性ができるので更新対象なら不整合が発生しないような考慮が必要
場合によってはサブタイピングでテーブル分割される

後者は単独で使われるほうが一般的
FKがNULLの場合なんかが一番わかりやすい
終了日をNULLにするのも一般的にはこっちのケース

472 :NAME IS NULL:2023/08/05(土) 13:26:56.02 ID:???.net
>>470
SQL86以降の標準SQL一般の話。ベンダ拡張なんかは考慮してないが。

調べてみたら今はSQL:2023まであるんだな。
ちょうど、UNIQUEにNULLが含まれる場合の振る舞いを指定できる仕様が追加されたらしい。
http://peter.eisentraut.org/blog/2023/04/04/sql-2023-is-finished-here-is-whats-new

473 :NAME IS NULL:2023/08/05(土) 17:59:04.64 ID:???.net
=NULLを認めていればこんな役に立たない議論しなくて済んだのに
3値論理自体が無用の長物

474 :NAME IS NULL:2023/08/05(土) 18:25:57.21 ID:???.net
これは議論ではないと思います
会話にすらなっていません

475 :NAME IS NULL:2023/08/05(土) 18:31:00.10 ID:???.net
確かに。文脈を理解して回答を出すというより、単語に反応して関係ない意見表明をしてるだけでChatGPT以下

476 :NAME IS NULL:2023/08/05(土) 18:57:27.47 ID:???.net
要はNUMBERやVARCHARといった型の定義域の外の値が1個使えたらいいのにって話だな。それにNULLを充てれば、と。
でもそれが1個ならいいけどそうとも限らんしな。

477 :NAME IS NULL:2023/08/05(土) 23:03:29.67 ID:xddGTzFC.net
>>473
CUIの時代だと空を見た目で表現するのが難しい。
いまでも文字列として「NULL」とか「(NULL)」という列値を設定するプログラマがいる。

値が設定されていないことをチェックする構文を常に書かないといけないことになったら、そっちの方が面倒なことになる。

478 :NAME IS NULL:2023/08/05(土) 23:17:20.60 ID:???.net
実際の現場って形通りやってないと思う
多少アンチパターンでも動くのを優先してるかと

479 :NAME IS NULL:2023/08/06(日) 12:38:50.13 ID:XnCAY9352
税金て゛人殺し支援までしてるこの世で最もС○2排出に積極的な世界最悪殺人テ□組織公明党國土破壊省斉藤鉄夫か゛都市のСΟ2ガ―だのバ力
晒して,力による‐方的な現状変更によって都心まて゛数珠つなぎで鉄道の30倍以上もの莫大な温室効果カ゛スまき散らすクソ航空機倍増させて
気侯変動海水温上昇させてかつてない量の水蒸氣を日本列島に供給させて洪水に土砂崩れに暴風に突風にと住民の生命に財産にと破壊し尽くし
火災保険料まて゛爆上げ、日本列島を灼熱地獄にして熱中症て゛殺害、大量破壞兵器クソ航空機の騒音で窓も開けられず冷房カ゛ンガン.クソ航空機
自体の莫大な温室効果ガスに加えて作為的に住宅地を騒音まみれにして温室効果ガスをスパヰラル的に爆増させてるのが前代未聞史上最惡の
殺人鬼斉藤鉄夫,日本人を誰も殺してない北朝鮮ガ―だの寝言は寝て言えや、齊藤鉄夫は何万人の日本人を殺し続けてることか.クソ航空機が
運ひ゛込むコ口ナで殺しまくってあらゆる後遺症て゛人生破壞,メリットがデメリッ├を上回るた゛のほさ゛いてワクチン打って殺害.フクシマ汚染水
排出も同様の理屈で大勢殺されるのが目に見えてるわな、こんなデタラメテ囗國家が原発再稼働とかお前ら立ち上か゛らないとマジ殺されるそ゛!

創価学会員は.何百萬人も殺傷して損害を与えて私腹を肥やし続けて逮捕者まて゛出てる世界最惡の殺人腐敗組織公明党を
池田センセ━か゛ロをきけて容認するとか本氣て゛思ってるとしたら侮辱にもほと゛か゛あるそ゛!
hТtPs://i、imgur.сοm/hnli1ga.jpeg

480 :NAME IS NULL:2023/08/06(日) 21:46:12.17 ID:???.net
上でも書いたけど適用日がたんなる参照項目ならnullでも構わないけど
範囲指定なんかにも使われる場合、コードの実装時に面倒だからそういう事があるならnullで持たないほうがいいと思うけどな

481 :NAME IS NULL:2023/08/06(日) 22:01:46.99 ID:???.net
範囲指定する場合は、そもそも検索対象から外されているだろう

482 :NAME IS NULL:2023/08/06(日) 22:29:11.75 ID:???.net
開始日と終了日が無限小/無限大のケースがあるならそれをNULLで表現すると
範囲検索のクエリがやや複雑になるね。

483 :NAME IS NULL:2023/08/06(日) 22:48:01.22 ID:???.net
出題者からそういう依頼は出ていないので考えなくて良い

484 :NAME IS NULL:2023/08/07(月) 00:28:09.95 ID:???.net
バグったときのリスクを考えるとNULLよりもセンティネル値のほうがベターだとは思うが
SQL2011のapplication time periods機能でNULLがunboundとして扱われるDBMSもあるのでその場合はNULLで十分だと思う

485 :NAME IS NULL:2023/08/08(火) 22:02:57.62 ID:cLfdUeWR.net
設計を語るスレなのに、IS NULL検索が頻発する設計がいいらしいw

486 :NAME IS NULL:2023/08/08(火) 22:36:03.34 ID:???.net
NULLを使っていてもIS NULL検索が不要になるんだよ

487 :NAME IS NULL:2023/08/09(水) 20:10:46.59 ID:JdJxxmkU.net
質問者がNULLが嫌だと言い始めたのがこの話題なんだが?

488 :NAME IS NULL:2023/08/09(水) 20:16:02.27 ID:JdJxxmkU.net
開始日がNULLかどうか調べないと、データの状態がわからないというデータモデルが好きらしいから、勝手にやればいいんじゃない。

489 :NAME IS NULL:2023/08/09(水) 21:09:23.48 ID:???.net
別にNUKKが嫌だとは言ってないだろう
選択肢として色々言ってるだけだ

490 :NAME IS NULL:2023/08/09(水) 21:17:17.07 ID:???.net
自分が設計する際は条件指定される項目にNULLは許してないけどそれを許可する人もいるだろうぐらいの認識だわ
かりに今回みたいな適用期間をNULL不可にした場合は暫定的な日付を入れることになるから
登録・更新時や画面に表示する際に考慮が必要だけど
少なくとも検索にNULLを考慮した条件を記載するよりは不具合も起きにくいと思ってる
登録更新時にNULLを何らかの日付に変換し忘れ→SQLエラーになる
画面表示時に日付をNULLに変換し忘れ→変な日付がでる

491 :NAME IS NULL:2023/08/09(水) 23:15:28.70 ID:???.net
入力し忘れなんてのは、今回の質問とは無関係だろう

492 :NAME IS NULL:2023/08/09(水) 23:16:35.78 ID:???.net
なんで条件を勝手に付け加えるんだろう
その方が不思議でならない

493 :NAME IS NULL:2023/08/09(水) 23:26:01.97 ID:???.net
>>491
入力し忘れの話は誰もしてなくね?

494 :NAME IS NULL:2023/08/09(水) 23:42:39.89 ID:???.net
>登録更新時にNULLを何らかの日付に変換し忘れ

とは言ってる

495 :NAME IS NULL:2023/08/10(木) 07:32:58.92 ID:???.net
489書いたの俺だけど入力し忘れではなく
画面適用日の開始や終了が空欄(日付指定なし)の場合はDB上は1900-01-01や2999-12-31といった値に置き換えて更新
画面表示の際は1900-01-01や2999-12-31の場合は空欄にするって意味だったけど伝わらなかったみたいだね
すまんね

496 :NAME IS NULL:2023/08/10(木) 11:27:56.59 ID:???.net
>>492
要件が不十分だからでしょ
要件が不十分だったり不明瞭なら
ある程度までは前提を追加して案を考えるのが設計というもの

497 :NAME IS NULL:2023/08/10(木) 11:33:18.40 ID:???.net
いや、要件を依頼者とは違う人が
好き勝手に言い出す時点で
設計とは違う話になってる

もう、独り言の世界

498 :NAME IS NULL:2023/08/10(木) 12:34:15.09 ID:???.net
最初に与えられた要件を絶対視する文化で育った人なのかな
実際に要件定義や設計をやればそれが以下に無駄かわかるようになるよ

499 :NAME IS NULL:2023/08/10(木) 12:44:56.71 ID:???.net
>>490に書いてるような変換機能はほぼ必須だから
要件として提示されてなくても考えるのは当たり前だよね

500 :NAME IS NULL:2023/08/10(木) 12:51:05.34 ID:???.net
書いてないものを作る名人

501 :NAME IS NULL:2023/08/10(木) 13:21:07.54 ID:???.net
>>497
設計を語れないなら黙ってろよw
当初質問した人なんてもう反応もしないわけで今はなしてる話題なんて完全に延長戦みたいなもんだろ
それと設計する以上はある程度の要件がある前提の話でそれもなくて>>371みたいにカラムの持ち方だけの質問なんて
正確な答えなんてでるわけないわ
・開始日、終了日というカラムが存在するテーブルがある
・「期間指定なし」を実現したい
A:期間指定なし用のカラムを追加する(is_unlimitedが1なら無制限になるとか)
B:開始日・終了日のカラムを「0000-00-00」(またはNULL)にする
こんな質問考える必要ないならルールに従えばいいだけ。ルールがないならどっちでも可能だから好きにしろで終わりだろ

502 :NAME IS NULL:2023/08/10(木) 15:02:15.16 ID:???.net
それは設計ではなく独り言って言うんだよ

503 :NAME IS NULL:2023/08/10(木) 17:49:39.54 ID:???.net
語るスレだし。

504 :NAME IS NULL:2023/08/10(木) 17:53:37.50 ID:???.net
具体的な話もだせないでケチつける雑魚がいるスレはここですか?

505 :NAME IS NULL:2023/08/10(木) 17:56:25.67 ID:???.net
オレの妄想にケチ付ける奴は雑魚だ!

506 :NAME IS NULL:2023/08/10(木) 23:50:07.03 ID:???.net
>>501
お前は何にでも批判したいだけじゃん
自分の意見を出すのが怖い臆病者だ
だから他人の意見を否定するしか能がない
終わってるのはお前だよ

507 :NAME IS NULL:2023/08/11(金) 01:17:57.14 ID:izBijMIW.net
スレッドの目的が機能し始めたのに、データモデリングすらわからない人間がこのスレッドの書き込みを気に入らなくて批判しているのだろう。

508 :NAME IS NULL:2023/08/11(金) 01:22:45.90 ID:izBijMIW.net
>>501
カラム値がNULLのときの状況を説明するドキュメントが必要な設計を思いつくのは、ER図やテーブル定義書すら書かないレベルのやつの発想だからな。

カラムすべてに何かしらの値が設定されていないといけないという冷静に考えればおかしなことに気づかないのは、ドキュメンテーションをしないからだ。

509 :NAME IS NULL:2023/08/11(金) 10:39:03.56 ID:???.net
>>508
センティネル値でもドキュメントに説明が必要なのは同じやぞ
書いたことないのかな?

510 :NAME IS NULL:2023/08/11(金) 12:12:29.44 ID:izBijMIW.net
「NULLのときは○○」なんて書いても、このドキュメントを見ないとわからないクソ設計という意味なんだが?

511 :NAME IS NULL:2023/08/11(金) 12:20:23.15 ID:???.net
適当な日付入れて、それが未設定の意味だとする方がドキュメント必要だぞ

512 :NAME IS NULL:2023/08/11(金) 13:06:47.84 ID:???.net
0000-00-00を実際の開始日付だと思うわけ無いじゃん
実務経験ゼロかよ

513 :NAME IS NULL:2023/08/11(金) 13:24:00.36 ID:???.net
バグだと思われるだけ

514 :NAME IS NULL:2023/08/11(金) 13:36:14.17 ID:???.net
通常の日付じゃないことはわかったとして、それが何かの意味を持った値なのか、どういう意味なのかは
説明しないとわからんと思うぞ。もちろんNULLもだけど。

515 :NAME IS NULL:2023/08/11(金) 13:44:29.97 ID:???.net
ドキュメント作ったことのない請負かな?

516 :NAME IS NULL:2023/08/11(金) 14:39:30.52 ID:???.net
>>510
日本語能力が致命的に低いからドキュメント書いちゃダメなやつだね

517 :NAME IS NULL:2023/08/11(金) 14:42:36.34 ID:???.net
>>512
実務経験が少しでもあれば絶対に0000-00-00なんていう日付は選ばないんだがw
マジかよ

518 :NAME IS NULL:2023/08/11(金) 15:28:48.80 ID:???.net
あるスカラーフィールドにそのフィールドの型の定義域に含まれない意味を持った値を格納する方法は
いまの標準SQLの範囲には無いから絶対にこうだという解はない。
いくつか案は考えられるからプロコン挙げてその案件に合った案を選ぶのがふつう。

519 :NAME IS NULL:2023/08/11(金) 15:33:53.23 ID:???.net
文字型じゃないとはいらなくね?

520 :NAME IS NULL:2023/08/11(金) 15:45:09.62 ID:???.net
NULLはどの言語でもどのDBMSでも同じものがサポートされてるけど
9999-12-31のような固定値は使う言語やDBMSによってどの値を選択するか変わってくる上に
アーキテクチャによってアプリ層/DB層での定数管理方法なんかも変わってくるので
その辺りを総合的に考慮する必要が出てくる
特にDBMSの移行時にデータ型の変更だけでなくデータ自体を更新する必要があると結構めんどくさい

NULLのほうがバグるリスクとバグったときにクリティカルな問題につながるリスクが格段に高いんだけど
その辺りのリスクが許容できる程度に低い状況ならNULLも十分現実的な選択肢
NULLの考慮が必要なデータアクセスロジックが複数のアプリに分散するような仕組みなら辞めといたほうが無難

521 :NAME IS NULL:2023/08/11(金) 21:08:38.63 ID:???.net
さすがにそんな前提まで持ち出すのは無理がないか?
普通なら自分がいつも使ってるDBを前提とするか、依頼する側からDBを指定してくるだろ
話をこじらせようとしか思えないわ

それと移行するとした場合にしてもデータの解析ぐらいはするだろうし、
移行元が9999-12-31が入ってて、移行先が使えないなら別の値にすりゃいいだけだし、
プログラムにも手を入れるにしても普通なら9999-12-31の定数ぐらいは宣言してるだろうからそれを変更すればいいだけじゃね

ここにはNULL支持派とNULL否定派がいるから結局この話題については両者が納得できる落としどころなんてないだろうな

522 :NAME IS NULL:2023/08/11(金) 21:16:52.63 ID:???.net
ないので、終了

523 :NAME IS NULL:2023/08/11(金) 21:19:57.30 ID:???.net
>ここにはNULL支持派とNULL否定派がいるから

常にそのどちらかでなければならないと考えている人ばkりじゃあるまい。

524 :NAME IS NULL:2023/08/11(金) 22:06:52.55 ID:???.net
今現在の自分が持ってる狭い視野と物差しだけでしか物事を見れない人はDB設計には不向き

525 :NAME IS NULL:2023/08/11(金) 22:18:42.98 ID:???.net
お客 「もうお前は来なくて良い」

526 :NAME IS NULL:2023/08/12(土) 00:53:30.73 ID:???.net
>NULLのほうがバグるリスクとバグったときにクリティカルな問題につながるリスクが格段に高い
まずこれをきちんと立証してから言ってくれ

527 :NAME IS NULL:2023/08/12(土) 02:03:31.93 ID:???.net
立証w

528 :NAME IS NULL:2023/08/12(土) 09:34:29.64 ID:???.net
頭を切開して妄想を取り出して見せて

529 :NAME IS NULL:2023/08/12(土) 11:54:13.68 ID:???.net
基本的に適用期間を使うとしたら
「ある基準日(例 2023/8/12)で使用する情報を取得する」みたいな感じだと思うがNULL不可であれば
適用開始日≦基準日 and 基準日≦適用終了日
の様な感じで実装できるけどNULL可能だと条件が増えるからそういう意味ではリスクが高くなるんじゃね
仮に基準日範囲だとさらに複雑になるわけだしな
>クリティカルな問題
これはどっちもどっちだと思うから言い過ぎだと思う

530 :NAME IS NULL:2023/08/12(土) 12:25:01.98 ID:???.net
範囲選択する様なSQLだと、最初からNULLを除外してくれます
考慮する必要が無くなるんだから、条件は増えないでしょう

531 :NAME IS NULL:2023/08/12(土) 12:41:47.57 ID:???.net
>>530
除外されたら困るからこそ考慮する必要があるんですけどね

532 :NAME IS NULL:2023/08/12(土) 13:15:03.95 ID:???.net
何も困らない。なんで困るの?

533 :NAME IS NULL:2023/08/12(土) 14:35:46.95 ID:???.net
こういう開発者がいるのがNULLのほうがバグるリスクが高い理由の一つ

534 :NAME IS NULL:2023/08/12(土) 15:06:09.99 ID:???.net
自分の出すバグを人のせいにする奴っているよね

535 :NAME IS NULL:2023/08/12(土) 15:33:58.72 ID:???.net
>>529
>>クリティカルな問題
>これはどっちもどっちだと思うから言い過ぎだと思う

データ取得時のバグはNULLのハンドリング忘れやハンドリング間違いによって起きる
結果として該当データが存在するにもかかわらずデータが取得されない状況やその逆が発生する
キャンペーン管理で使ってれば大々的に宣伝した割引価格が適用されないといった問題につながる
9999-12-31のような固定値のハンドリング忘れでは同じような問題は発生しない

データ更新時のバグはNULLが入るべきではない状況でNULLが入ったり
NULLが入るべき状況でNULL以外の値が入ることになるんだが
これは9999-12-31のような固定値でも引き起こす問題の種類は同じ

536 :NAME IS NULL:2023/08/12(土) 15:49:38.03 ID:???.net
NULLのデータは、そもそも該当データではないんだよ
NULLでも該当するパターンって一体何?

537 :NAME IS NULL:2023/08/12(土) 16:08:57.93 ID:???.net
例えば適用日が下記の様なデータがあったとする
NULL〜2022/12/31
2023/1/1〜2023/12/31
2024/1/1〜NULL
基準日がそれぞれ?2022/10/1、?2023/10/1、?2024/10/1だった場合に?と?は条件にNULLを考慮しないととれなくないか?
同じく基準日範囲が2022/12/1〜2023/3/31に含まれるデータを取得とかだと同じく面倒じゃねと思うんだが
まあ実際にこういう事を想定したデータを扱ったことがないから簡単に考えてるんだと思うが実際に実装させるとテストも含めてかなりめんどくさいと思うけどな

538 :NAME IS NULL:2023/08/12(土) 16:27:06.65 ID:???.net
常識で考えれば、範囲指定する選択の場合は、NULLは除外するだろう

539 :NAME IS NULL:2023/08/12(土) 16:59:47.20 ID:???.net
ECサイトのDBで商品マスタの価格が税込み価格しかないって危険すぎないですか??
税込み金額から除算で税抜金額出すのって誤差出ますよね?

540 :NAME IS NULL:2023/08/12(土) 17:20:08.25 ID:???.net
税率が変わることもあるので、税込みにしてしまうと更新が大変だな

541 :NAME IS NULL:2023/08/12(土) 22:08:56.11 ID:???.net
>>539
誤差というか端数処理は消費税計算において必ず発生するものだから決められたルールに沿って処理するだけ
総額表示義務対象でユーザーに見える販売価格を管理するためのマスターってことなら
税込価格だけ持って税抜価格は計算で行うという方法でもそんなにおかしくない

542 :NAME IS NULL:2023/08/12(土) 23:12:35.74 ID:???.net
いやおかしい
決められたロジックで出すからこそ税込処理はアプリ側でさせるべき

543 :NAME IS NULL:2023/08/13(日) 00:08:17.95 ID:???.net
マスタに税込価格と税抜価格を持っていたとしてもその差分が
客からもらう税金と必ずしも一致するわけじゃないから税金計算処理は必ずアプリロジックが入る
その処理が税込価格からの計算なのか税抜価格からの計算なのかという違いがあるだけ

544 :NAME IS NULL:2023/08/13(日) 00:09:58.09 ID:???.net
税率が変わる事も想定した方が良いぞ

545 :NAME IS NULL:2023/08/13(日) 00:10:48.14 ID:???.net
ガソリンスタンドとか商品マスタに税抜価格だけ持ってて税金計算を毎回アプリ側でやってると思う?

スーパーでもバーコードを通して参照する商品マスタの価格は税込価格で
それをベースに内税の算出をアプリ側でやるところも増えてる
Amazonとかもたぶんそうなんじゃないかな

546 :NAME IS NULL:2023/08/13(日) 00:14:50.53 ID:???.net
税率変わる毎にマスタ洗替するわけないだろ

547 :NAME IS NULL:2023/08/13(日) 00:25:47.56 ID:???.net
毎回手計算で税額出してると思う?

548 :NAME IS NULL:2023/08/13(日) 00:34:23.99 ID:???.net
>>546
洗い替えなんてしない
税率が変わるタイミングで税込価格も変更したければその日から有効になる新しい価格を設定するだけ
税率が変わっても税込価格を維持したければ新しい価格を設定する必要もない

549 :NAME IS NULL:2023/08/13(日) 00:36:26.60 ID:???.net
ガソリンの例でてるから、それ使うけど
給油量は毎回違うんだよ

550 :NAME IS NULL:2023/08/13(日) 00:43:07.93 ID:???.net
スーパーの例がでてるからそれ使うけど
何万何十万ものある商品を扱うマスターに
過渡的に使う価格をずっと保持するのか?
改訂後は二度と使わないレコードだぞ

551 :NAME IS NULL:2023/08/13(日) 00:46:06.37 ID:???.net
消費税上がる度に、マスターのカラムが増えてくるんだな

すごい設計だ

552 :NAME IS NULL:2023/08/13(日) 00:54:21.02 ID:???.net
>>549
何の話だよw

>>550
一般的にはずっとは保持しない
決められた保持期間をすぎれば古いものは整理する
店や商品によるけど一般的な小売ならだいたい3年は保持してる
改定後でも履歴の参照や分析用途に使う

553 :NAME IS NULL:2023/08/13(日) 00:55:25.02 ID:???.net
>>551
君の頭の中のエアー設計どうなってんだよw
興味ないけど

554 :NAME IS NULL:2023/08/13(日) 00:58:51.86 ID:???.net
消費税改定する度にマスターを更新しないといけない様な作り二はしません

555 :NAME IS NULL:2023/08/13(日) 10:07:21.48 ID:???.net
3年毎にマスターのテーブル設計が変わる
データ更新ではなく
飛んでもない設計だな

履歴は、既に変わらないデータなので、
購入した時点での価格をレコード内に保持していれば
過去の価格の参照は必要ない

556 :NAME IS NULL:2023/08/13(日) 16:25:20.32 ID:???.net
システムによって細かい違いはあるかもしれないが
うちが取り扱ってる販売管理は商品ごとに税込み税抜き非課税が選択できる
そのうえで消費税の計算を伝票毎に行うか、締め日にまとめて行うかも選択できる

557 :NAME IS NULL:2023/08/13(日) 17:34:14.78 ID:???.net
それは要件であって設計ではない

558 :NAME IS NULL:2023/08/13(日) 18:57:21.07 ID:???.net
負け惜しみコメントとかまってちゃんな素人コメントが多すぎ

559 :NAME IS NULL:2023/08/13(日) 20:21:54.74 ID:???.net
上流工程含めて一から設計する経験したことない奴ばかりなんでしょ
実際は誰かが書いた仕様書通りに作るだけの雑魚さんだと思われる

560 :NAME IS NULL:2023/08/13(日) 20:32:03.76 ID:???.net
仕様書通りに作れるならまだ良いんだが
どこからか俺様仕様書が出てきて、
発注者とけんか始めるからなあ

561 :NAME IS NULL:2023/08/14(月) 00:48:49.68 ID:???.net
素人丸出しなのになぜもう少し謙虚になれないのか
自分でも分かってるでしょ

562 :NAME IS NULL:2023/08/14(月) 13:48:29.37 ID:???.net
商品マスタと価格テーブルの連携じゃないのか?
価格テーブルなら、いつの税率かや、キャンペーン・割引価格も出せるじゃん

563 :NAME IS NULL:2023/08/14(月) 14:18:52.56 ID:???.net
>>562
何で紐づけするわけ?

564 :NAME IS NULL:2023/08/14(月) 14:35:19.25 ID:???.net
素人以下か

565 :NAME IS NULL:2023/08/14(月) 15:10:24.90 ID:???.net
>>563
商品ID

566 :NAME IS NULL:2023/08/14(月) 18:12:51.30 ID:???.net
>>555
>3年毎にマスターのテーブル設計が変わる

これ、どういう設計を想定しているんだろう。
ありえない想定を挙げてそれに反論するストローマン論法にも思えるが。

567 :NAME IS NULL:2023/08/14(月) 18:19:47.36 ID:???.net
>決められた保持期間をすぎれば古いものは整理する
>店や商品によるけど一般的な小売ならだいたい3年は保持してる
>改定後でも履歴の参照や分析用途に使う

大体3年だと言う根拠は出してないが、
手作業で必要かどうか判断して消さないと行けない設計なんだろうな
この考えだと購入者の購入履歴に出てくる価格は
ずっと残さないと行けなくなるだろう
メチャクチャメンテナンス作業が大変だな
扱い数の少ない個人商店程度なら、できるかもしれない

568 :NAME IS NULL:2023/08/14(月) 18:33:43.04 ID:???.net
一般的な小売って何やねんって話
要件具体化しないで設計や運用を語れるわけないだろ

569 :NAME IS NULL:2023/08/14(月) 18:35:34.80 ID:???.net
別に無理に語る必要は無いよ

570 :NAME IS NULL:2023/08/14(月) 18:36:45.53 ID:???.net
発注者が素人で、こういう感じなもの作ってほしいって言うなら分かるが
設計者が書く文章ではないだろ

571 :NAME IS NULL:2023/08/14(月) 18:48:06.16 ID:???.net
至極当たり前のことが書かれてるのに
自分勝手な妄想を膨らまして
その妄想に自分でダメ出しする素人さん

572 :NAME IS NULL:2023/08/14(月) 18:48:25.03 ID:???.net
>>567
それレコードの話だよね。テーブル再設計ってのはどこから出てくる?

573 :NAME IS NULL:2023/08/14(月) 18:50:51.79 ID:???.net
過去の料金をどこに格納するつもりだったの?
当然商品マスターのどこかなんでしょ?
この設計だと、次第に溜まっていくよね

574 :NAME IS NULL:2023/08/14(月) 18:51:51.76 ID:???.net
これを当たり前だと受け取る設計者がいるのか・・

575 :NAME IS NULL:2023/08/14(月) 19:00:32.52 ID:???.net
>>573
同じテーブルに保持するか別の保持用テーブルを用意するか、どちらにしても
3念ごとに再設計ってのはおかしくね?

576 :NAME IS NULL:2023/08/14(月) 19:02:46.08 ID:???.net
やり方は色々あるだろうけど、それにしてもメンテナンスで消してく作業が必要になる

577 :NAME IS NULL:2023/08/14(月) 19:04:03.66 ID:???.net
>決められた保持期間をすぎれば古いものは整理する
>店や商品によるけど一般的な小売ならだいたい3年は保持してる

どう見ても手作業を想定してるよね

578 :NAME IS NULL:2023/08/14(月) 19:05:11.51 ID:???.net
>改定後でも履歴の参照や分析用途に使う

これするとなると、3年では消せそうもない
店が廃業するまで残すことになりそう

579 :NAME IS NULL:2023/08/14(月) 19:06:56.33 ID:???.net
んで、これの理由は?

>3年毎にマスターのテーブル設計が変わる

580 :NAME IS NULL:2023/08/14(月) 19:08:16.01 ID:???.net
残す料金のカラムは消せないんだから、料金改定の度に増えるんだろう

581 :NAME IS NULL:2023/08/14(月) 19:09:10.40 ID:???.net
これ以上は本人の設計次第だから、書いた本人に聞いて

582 :NAME IS NULL:2023/08/14(月) 19:11:21.87 ID:???.net
>残す料金のカラムは消せないんだから、料金改定の度に増えるんだろう

どういう設計なのかいまいちわからんな。
もしかして消費税率が変わるたびにカラムが増える想定なのか?

583 :NAME IS NULL:2023/08/14(月) 19:11:54.81 ID:???.net
そんな事は書いた本人にしか分からないから本人に聞いて

584 :NAME IS NULL:2023/08/14(月) 19:14:32.21 ID:???.net
ん?もしかして >>661 を書いた本人なの?

どういう設計なのか、オレも聞きたいんだが

585 :NAME IS NULL:2023/08/14(月) 19:15:14.41 ID:???.net
>>552 を書いた本人なの?

586 :NAME IS NULL:2023/08/14(月) 19:17:22.28 ID:???.net
オレは設計した本人ではないから、
どういう設計か、聞いて見たい側だ

587 :NAME IS NULL:2023/08/14(月) 19:20:59.53 ID:???.net
俺は>>552じゃないが>>555に質問しただけ。どういう設計を想定して>>555を書いたのか。

588 :NAME IS NULL:2023/08/14(月) 19:23:45.53 ID:???.net
>>552の真意はわからんが、やっぱり>>575あたりの解釈が妥当じゃね?
ちなみに俺はり>>575本人。

589 :NAME IS NULL:2023/08/14(月) 19:23:50.64 ID:???.net
まず >>552に聞こうじゃないか ここから話が始まってる

一つの商品について最低3年分の価格を全部マスターに保存しておくそうだ
履歴を追うことも考えたら、もっと必要だろう
どう格納するのかとても興味がある

590 :NAME IS NULL:2023/08/14(月) 19:26:41.74 ID:???.net
最初に言い出した >>552 が、
その設計内容を詳細に語ってないから、
話がこじれてるんだろう
こうではないか、ああではないかと
本人が、実はこうだと言えば済む話

591 :NAME IS NULL:2023/08/14(月) 19:35:19.91 ID:???.net
>>589
>どう格納するのかとても興味がある

適用開始日を使った例が既に出ていたと思うが。

592 :NAME IS NULL:2023/08/14(月) 19:38:04.11 ID:???.net
結局これは>>555本人が出てこないと分からんよな。

>3年毎にマスターのテーブル設計が変わる

593 :NAME IS NULL:2023/08/14(月) 19:42:44.20 ID:???.net
>>552 が素晴らしい解答をすると期待している

>一般的にはずっとは保持しない
>決められた保持期間をすぎれば古いものは整理する
>店や商品によるけど一般的な小売ならだいたい3年は保持してる
>改定後でも履歴の参照や分析用途に使う

こんな経験豊富で含蓄のある開発者は中々ここに来てくれないし

594 :NAME IS NULL:2023/08/14(月) 19:58:39.76 ID:???.net
>>593
もう一回書くけど>>575の解釈じゃ納得いかないの?何を求めているのかよくわからんのだが。

595 :NAME IS NULL:2023/08/14(月) 20:10:32.70 ID:???.net
>>552の本人に聞きたいんですよ

小売業にも精通している人がどういう設計するのかにとっても興味があります
どうやって履歴を辿るのとかどういう分析をするのとか、皆さんも興味あるでしょう

596 :NAME IS NULL:2023/08/14(月) 20:21:58.87 ID:???.net
>>595
>>575じゃだめなの?なんで本人じゃないとだめなの?そもそも何を疑問に思っているわけ?

597 :NAME IS NULL:2023/08/14(月) 20:23:27.26 ID:???.net
で、>>555はいまだに意味が分からんからこっちはよろしく。

>3年毎にマスターのテーブル設計が変わる

598 :NAME IS NULL:2023/08/14(月) 21:07:09.32 ID:???.net
つまんないなあ
なんで本人出てこないの?
と言うか、隠れてるの?

599 :NAME IS NULL:2023/08/14(月) 21:08:12.27 ID:???.net
最初の>>552が意味不明だから
判らないんじゃないかと思いますよ

600 :NAME IS NULL:2023/08/14(月) 21:10:38.93 ID:???.net
>一般的にはずっとは保持しない
>決められた保持期間をすぎれば古いものは整理する
>店や商品によるけど一般的な小売ならだいたい3年は保持してる
>改定後でも履歴の参照や分析用途に使う

こんな経験豊富で含蓄のある開発者は中々ここに来てくれないし
雑魚じゃ説明も無理

601 :NAME IS NULL:2023/08/14(月) 21:44:50.14 ID:???.net
>>566で突っ込まれた>>555が必死に話を逸らせようとしているように見えるが。

もう一度聞くがなんで>>552本人の回答じゃないと納得できないの?
興味があるだけなら>>575じゃ納得できない?
>>575に反論があるなら俺が答えるよ。

602 :NAME IS NULL:2023/08/14(月) 21:52:10.43 ID:???.net
伸びてると思ったら一人で暴れてるだけだったw

603 :NAME IS NULL:2023/08/14(月) 21:52:42.58 ID:???.net
元元の話は、なんだったっけ?

604 :NAME IS NULL:2023/08/14(月) 21:53:13.72 ID:???.net
>一般的にはずっとは保持しない
>決められた保持期間をすぎれば古いものは整理する
>店や商品によるけど一般的な小売ならだいたい3年は保持してる
>改定後でも履歴の参照や分析用途に使う

こんな経験豊富で含蓄のある開発者は中々ここに来てくれないし

605 :NAME IS NULL:2023/08/14(月) 21:53:53.84 ID:???.net
この話からそらしたい人がいるってだけでしょ

606 :NAME IS NULL:2023/08/14(月) 21:54:18.72 ID:???.net
とりあえずこれがどういう設計を想定していたのか。

>3年毎にマスターのテーブル設計が変わる

607 :NAME IS NULL:2023/08/14(月) 21:54:39.52 ID:???.net
こんな経験豊かな人の話なんて滅多に聞けないよ

608 :NAME IS NULL:2023/08/14(月) 21:55:34.95 ID:???.net
まず言った本人の設計を聞かせてほしいね
すごく経験豊かな人だよ
聞いても無駄じゃないと思うよ

609 :NAME IS NULL:2023/08/14(月) 21:57:21.48 ID:???.net
>>604
だから疑問があるならそれをちゃんとした質問にしてみなよ。
おれは>>575で問題ないと思うんだが何が疑問なのかわからん。

610 :NAME IS NULL:2023/08/14(月) 21:58:27.37 ID:???.net
私のような雑魚を問い詰めるより、

>>552 のような経験豊かな人の話の方がためになるよ

611 :NAME IS NULL:2023/08/14(月) 21:59:39.38 ID:???.net
経験豊かな本人の口から聞きたいです

何故本人に聞こうとしないのか、不思議

612 :NAME IS NULL:2023/08/14(月) 22:01:22.54 ID:???.net
>一般的にはずっとは保持しない
>決められた保持期間をすぎれば古いものは整理する

これどうやるか、他の人が説明できるんですか?

613 :NAME IS NULL:2023/08/14(月) 22:03:52.75 ID:???.net
>経験豊かな本人の口から聞きたいです

もう駄々っ子だな。
じゃあ俺も自称経験豊かだから>>575と答えておくわ。それで満足か?

614 :NAME IS NULL:2023/08/14(月) 22:05:25.09 ID:???.net
>>612
保持期間を判断する方法さえあればそれ以上テーブル設計に影響する話じゃないと思うが。

615 :NAME IS NULL:2023/08/14(月) 22:07:18.46 ID:???.net
どういう風な整理をするのか設計上重要だと思うんですけど

616 :NAME IS NULL:2023/08/14(月) 22:10:07.01 ID:???.net
>店や商品によるけど一般的な小売ならだいたい3年は保持してる

実務上重要だという見解ですよ
3年という期間がどうして導かれたのかは分かりませんが
豊かな経験からでてきた言葉なんでしょう、きっと

617 :NAME IS NULL:2023/08/14(月) 22:10:55.61 ID:???.net
>>615
保持期限を過ぎたレコードを削除する、というのは思いつくが
懸念しているのはどういう問題?

618 :NAME IS NULL:2023/08/14(月) 22:13:30.68 ID:???.net
>>616
それが3年だろうと10年だろうと設計の上では大した違いはないと思うが
そこにこだわる理由は?

619 :NAME IS NULL:2023/08/14(月) 22:13:57.63 ID:???.net
だから、本人が説明してくれれば済むと思うんですが

620 :NAME IS NULL:2023/08/14(月) 22:14:46.26 ID:???.net
拘るというか、本人がそのようにおっしゃってますので

621 :NAME IS NULL:2023/08/14(月) 22:15:55.39 ID:???.net
なんで本人の回答にこだわるの?
設計議論に俗人性は要らんだろう。ましてや匿名掲示板で。

622 :NAME IS NULL:2023/08/14(月) 22:18:00.09 ID:???.net
しかも、3年で削除して良いわけではなく、
何かしらの判断を必要としている見たいですよ
「整理する」と言う以上、誰かが判断しているみたいですよね?

623 :NAME IS NULL:2023/08/14(月) 22:18:47.26 ID:???.net
あのような発言をしたのだから、説明聞いても良いでしょう?

624 :NAME IS NULL:2023/08/14(月) 22:20:04.53 ID:???.net
>>620
3年の場合と10年の場合とで別の設計になるわけじゃないだろ。関係ないじゃん。
その数字が重要だと言っているのはあんた自身。それがなんで重要なのか本人のあんたが説明できる?

625 :NAME IS NULL:2023/08/14(月) 22:20:30.44 ID:???.net
なんで聞いてはいけないのか、その説明をしてくれても良いですよ
専門技術板なんて、ほぼ特定の人物しか書いていないんだし
書いた本人が、今この場にいないとは思いませんけどね

626 :NAME IS NULL:2023/08/14(月) 22:21:48.01 ID:???.net
>一般的な小売ならだいたい3年は保持してる

この発言見るだけで、実務経験が豊富なんだと判断できるでしょう

627 :NAME IS NULL:2023/08/14(月) 22:22:09.71 ID:???.net
やっぱりこれ書いた本人がごまかそうとしているんだろうな。のらりくらりと。

>3年毎にマスターのテーブル設計が変わる

628 :NAME IS NULL:2023/08/14(月) 22:24:23.10 ID:???.net
整理するという中味が判らないと、それはなんとも言えませんよ
料金改定の度にマスターの項目は増えていくんでしょ?
違うの?

629 :NAME IS NULL:2023/08/14(月) 22:25:06.39 ID:???.net
>>625
>>552
本人がいつ戻ってくるかは知らんがまずは今ここにいる俺の質問>>624に答えてくれよ。

630 :NAME IS NULL:2023/08/14(月) 22:25:43.98 ID:???.net
本人の説明を受けてから、続けましょう

631 :NAME IS NULL:2023/08/14(月) 22:26:00.15 ID:???.net
>>628
そうそう、これ。
どういう設計を想定してるの?

632 :NAME IS NULL:2023/08/14(月) 22:26:18.29 ID:???.net
この板は、大勢いるわけではないので、本人は今いると思いますよ

633 :NAME IS NULL:2023/08/14(月) 22:27:25.87 ID:???.net
どういう設計しているのか、気になるので、是非本人から説明していただきましょう

>一般的にはずっとは保持しない
>決められた保持期間をすぎれば古いものは整理する
>店や商品によるけど一般的な小売ならだいたい3年は保持してる
>改定後でも履歴の参照や分析用途に使う

634 :NAME IS NULL:2023/08/14(月) 22:28:26.36 ID:???.net
2,3人しかいないでしょ、いつも

635 :NAME IS NULL:2023/08/14(月) 22:28:50.70 ID:???.net
>>630
>>616本人がいるならその3年という数字が重要だと考える理由は答えられるわけじゃん。

636 :NAME IS NULL:2023/08/14(月) 22:30:05.41 ID:???.net
それは、本人に聞いて下さい
豊富な経験から導き出した数字なんでしょ
そういう書き方してますから

637 :NAME IS NULL:2023/08/14(月) 22:30:25.50 ID:???.net
>>633
その記述のどこから

>料金改定の度にマスターの項目は増えていくんでしょ?

という解釈になったんだか。

638 :NAME IS NULL:2023/08/14(月) 22:32:01.79 ID:???.net
雑魚の解釈なんです、どうでも良いことには拘らなくて良いですよ

経験豊富な本人の発言について、説明を求めています

639 :NAME IS NULL:2023/08/14(月) 22:38:17.21 ID:???.net
俺は経験豊富な本人の回答でなくてもかまわないから>>566や>637に答えてみてよ。

640 :NAME IS NULL:2023/08/14(月) 22:40:38.37 ID:???.net
いやあ、遠慮します
経験豊かな人の話の邪魔はしません

>一般的にはずっとは保持しない
>決められた保持期間をすぎれば古いものは整理する
>店や商品によるけど一般的な小売ならだいたい3年は保持してる
>改定後でも履歴の参照や分析用途に使う

こちらを是非聞かせて下さい

641 :NAME IS NULL:2023/08/14(月) 22:41:46.58 ID:???.net
何か簡単な質問だと思うんんですけどね
何故答えてくれないのかが不思議です
いるんでしょ?

642 :NAME IS NULL:2023/08/14(月) 22:47:04.89 ID:???.net
なんで匿名掲示板なのに特定人物を庇うんでしょうね?

643 :NAME IS NULL:2023/08/14(月) 22:47:53.59 ID:???.net
>いやあ、遠慮します

つまり、「本当は答えられるけど答える気になりません」てことねwww

644 :NAME IS NULL:2023/08/14(月) 22:48:47.81 ID:???.net
それよりも、

>一般的にはずっとは保持しない
>決められた保持期間をすぎれば古いものは整理する
>店や商品によるけど一般的な小売ならだいたい3年は保持してる
>改定後でも履歴の参照や分析用途に使う

こちらを是非聞かせて下さい

645 :NAME IS NULL:2023/08/14(月) 22:49:18.74 ID:???.net
本人なんでしょ?

646 :NAME IS NULL:2023/08/14(月) 22:50:58.64 ID:???.net
>いるんでしょ?

なんというか、自他境界が曖昧な感じ。

647 :NAME IS NULL:2023/08/14(月) 22:52:39.38 ID:???.net
>>641
そもそも質問になってないと思うんだが。具体的な質問は何?

648 :NAME IS NULL:2023/08/14(月) 22:55:07.20 ID:???.net
>>645
?俺が>>552本人であってほしいの?

649 :NAME IS NULL:2023/08/14(月) 22:57:39.53 ID:???.net
>>641
じゃあ俺を>>552と思って聞いてくれ。質問になってる質問で。

650 :NAME IS NULL:2023/08/14(月) 23:10:00.68 ID:???.net
>一般的にはずっとは保持しない
>決められた保持期間をすぎれば古いものは整理する

どうやるんですか?テーブル設計と処理を教えて下さいね
前提条件は、本人の書き込みの前にあります

651 :NAME IS NULL:2023/08/15(火) 01:09:51.87 ID:???.net
そもそも、「決められた保持期間」があるなら、それすぎれば
削除しないとまずいんじゃね、と

一般的な小売で3年ってことはないと思うが、まあ言い出したやつの一般はそうなんだろとしか

652 :NAME IS NULL:2023/08/15(火) 01:33:22.86 ID:???.net
ずっとは保持しない、あるいは保持したくないというのは、理解はするが

決められてというと、それは法律かな?税法上の保存期間か?
それだと3年って事はないと思う
他で決めるとするとなんだろう
法律じゃないとすれば事業者固有のルールかなにかか?
どこかの小売業でそういう決め方しているなら教えてほしいですね
履歴を扱う上で参照しているなら、その履歴が有効な間は消せなくなるよね
履歴の保存期間に依存するのかな?
保証期間として1年というのはあるが、民法だと10年近くの期間があった様に思う
さてさてどれを使うんだろう

653 :NAME IS NULL:2023/08/15(火) 01:44:51.10 ID:???.net
>>652
>ずっとは保持しない、あるいは保持したくないというのは、理解はするが
俺なら削除に関する要件がない限り、ずっと保持しときたいが

法律だとたしか帳簿は7年保存のはず
昔は印刷した紙を置いておけばOKだったけど
最近の法律でどうなったかはしらん

履歴に関してなら、履歴側に値を入れてあればマスタは消せる
マスタより履歴の生存期間が長いことはままあるので
あとは履歴としては有効だがその値は分からないってパターンも稀にはある

654 :NAME IS NULL:2023/08/15(火) 09:45:54.24 ID:???.net
>>650
それが純粋な質問だとすれば、テーブル設計についてはすでに書いたとおり、保持期間を過ぎたかどうか判断できる
時間的フィールドがあればいい。処理はそのフィールドと現在時刻などの基準事項との差が一定以上なら削除するだけ。
というかこのくらい想像つかなければ設計者失格というレベルだろう。
これが純粋な質問じゃなくて、「実際にはできないだろう」という反論なのだとしたらもうちょっと具体的に反論してみて。

655 :NAME IS NULL:2023/08/15(火) 10:00:10.23 ID:???.net
なんだろう、これが回答のつもりなのか?
設計に関して何もないぞ

設計者失格とか、どうでもいいよ
ちゃんと設計レベルの回答してみたら

>一般的にはずっとは保持しない
>決められた保持期間をすぎれば古いものは整理する

どうやるんですか?

656 :NAME IS NULL:2023/08/15(火) 10:45:11.63 ID:???.net
抽象的な説明だと理解できない人?どこが理解できないのかもうちょっと具体的に指摘してみて。

657 :NAME IS NULL:2023/08/15(火) 10:46:47.81 ID:???.net
直前に色々書かれている懸案くらいは読みなよ

>時間的フィールドがあればいい。処理はそのフィールドと現在時刻などの基準事項との差が一定以上なら削除するだけ。

こんなやり方では全然解決しないでしょうに

658 :NAME IS NULL:2023/08/15(火) 10:49:44.94 ID:???.net
>>657
うん、どう解決しないの?

659 :NAME IS NULL:2023/08/15(火) 10:50:12.11 ID:???.net
要件がわかってる発注者から、
「考慮不足」の一言言われて
突き返される恥ずかしい内容だぞ

660 :NAME IS NULL:2023/08/15(火) 10:51:29.66 ID:???.net
本当にこの業界で仕事している人なの?
学生さん?

661 :NAME IS NULL:2023/08/15(火) 11:45:55.12 ID:???.net
“テーブル”設計について勉強してる会員ランクの人でしょ

662 :NAME IS NULL:2023/08/15(火) 11:47:21.15 ID:???.net
答えを知ってて煽ってるのか、無知で知りたくてしつこいのかしらないが
>時間的フィールドがあればいい。処理はそのフィールドと現在時刻などの基準事項との差が一定以上なら削除するだけ。
これは正解の一つだろ?
IDもワッチョイもでないからNGしようがないがしつこすぎ

663 :NAME IS NULL:2023/08/15(火) 12:23:39.40 ID:???.net
ド素人のイチャモンにそんなに目くじらを立てなさんな

664 :NAME IS NULL:2023/08/15(火) 12:36:17.22 ID:???.net
単純には消せないって指摘があるだろうに字が読めないんだろうか

665 :NAME IS NULL:2023/08/15(火) 13:22:08.58 ID:???.net
要件を決めないで設計なんてできないから質問者が提示しないときにこういう場合はという前提で話してても
時折「それは要件で設計ではない」とかいう奴もいるし一部のアタオカはほんと迷惑

666 :NAME IS NULL:2023/08/15(火) 13:45:39.38 ID:???.net
>単純には消せないって指摘があるだろうに

これどのレスのこと?検索しても出てこないし、ほんと会話が続かない。

667 :NAME IS NULL:2023/08/15(火) 14:19:32.34 ID:???.net
>決められた保持期間をすぎれば古いものは整理する

>改定後でも履歴の参照や分析用途に使う

保持期間過ぎて削除したデータに、参照が必要になったら、どうするんですか?

668 :NAME IS NULL:2023/08/15(火) 14:28:02.42 ID:???.net
保持期限を過ぎて参照できないのは普通のことでは???そのために期限を定めるわけだし。

669 :NAME IS NULL:2023/08/15(火) 14:29:48.73 ID:???.net
普通とは思いませんけどね
客が購入したものについて問い合わせてくる事には、期限なんてないです

670 :NAME IS NULL:2023/08/15(火) 14:30:15.82 ID:???.net
噛み合わない議論してても仕方ない
お題をあげよう

あなたはネットフリックス類似のネット動画配信サービスを立ち上げることにしました。
Sakilaモデルを雛形にDB設計するとして、どのように改良すればよいか考えてください。
なお、ビジネス要件は現在のネットフリックスと同様とします。
https://i.imgur.com/MPoNaad.png

671 :NAME IS NULL:2023/08/15(火) 14:31:30.67 ID:???.net
かみ合わないと言うより、設計の基本がなってないのではないかと思うのですが

672 :NAME IS NULL:2023/08/15(火) 14:31:31.14 ID:???.net
なお、回答にあたってはER図を提出してください。

673 :NAME IS NULL:2023/08/15(火) 14:34:40.75 ID:???.net
その設計はおかしいよ、と何度も言われていて、
その言われていることが理解できないのかな?

674 :NAME IS NULL:2023/08/15(火) 14:36:34.85 ID:???.net
>どこからか俺様仕様書が出てきて、
>発注者とけんか始めるからなあ

発注者はそんなもの頼んだ覚えがないって怒ってます

675 :NAME IS NULL:2023/08/15(火) 14:37:46.80 ID:???.net
発注書、期限が来たので削除してしまったのでしょうか?

676 :NAME IS NULL:2023/08/15(火) 14:41:50.43 ID:???.net
>>669
>客が購入したものについて問い合わせてくる事には、期限なんてないです

仮に要求仕様を決定する立場の人がそう言うなら期限を実質無限にすりゃいいだけ。
設計の立場から言えば、それが3年でも10年でも99年でも対応できるよう考慮するくらい。

677 :NAME IS NULL:2023/08/15(火) 14:49:39.99 ID:???.net
イチャモンつけてきてる奴はデータの種類関係なく言い出してるから始末に負えないよな
例えば取引先の様なマスタであれば最後の取引でもなんでもいいからその日付より古いものは削除する
伝票の様な日常的に発生するデータであれば発生日より古いものを削除する
仮にマスタと伝票の削除する基準日が異なる(マスタの方が早く消える可能性がある)なら
伝票(履歴)にマスタの必要な情報を持つようにすればいい
これだけの話だろ?
そもそも保持期間が過ぎてるのに見えなくなるのがおかしいとか自分で変なこと言ってるのに気づかないのかね
こんな奴と一緒に仕事して仕事場でこんなこと言ってるようなら本物のキチガイだろ

678 :NAME IS NULL:2023/08/15(火) 14:51:06.30 ID:???.net
ふつう、商品には保証期間があるし、販売物について
民法上賠償請求が発生した場合の時効は10年です

客から請求があったとき、どうやって購入履歴を追いかけるつもりだったんでしょうか?
あなたの想定は何年間の設計ですか?
言われないと適当に決めちゃう人なんですか?

679 :NAME IS NULL:2023/08/15(火) 14:51:27.04 ID:???.net
>>670
同じサービスなら変える必要なし
以上

680 :NAME IS NULL:2023/08/15(火) 14:53:43.26 ID:???.net
>仮にマスタと伝票の削除する基準日が異なる(マスタの方が早く消える可能性がある)なら
>伝票(履歴)にマスタの必要な情報を持つようにすればいい

あらあら、設計のやり直しを始めましたよ

681 :NAME IS NULL:2023/08/15(火) 14:55:56.13 ID:???.net
履歴データで参照を行うなんて馬鹿げた方法はとるべきではありません。
このスレでも最初からそう言われてます

やっと歩みよりを始めましたね笑

682 :NAME IS NULL:2023/08/15(火) 14:57:46.82 ID:???.net
>>678
10年保持する必要あるなら保持期限を10年にすりゃいい話だが、まさか3年の場合と10年の場合で
設計が別になると思ってるんだろうか。

683 :NAME IS NULL:2023/08/15(火) 15:00:04.17 ID:???.net
商品のように入れ替わりが激しいマスターテーブルを、
購入履歴の様に期間が長い想定のテーブルから参照するのは間違いです

商品が廃番になったらどうするつもりなんでしょう

684 :NAME IS NULL:2023/08/15(火) 15:07:49.54 ID:???.net
ホンマどうしようもないアホやな
自分の妄想が正しいと信じて疑わないw

685 :NAME IS NULL:2023/08/15(火) 15:18:18.28 ID:???.net
このアホみたいなレスしてる奴は販売管理とかわかってないんだろうな
歩みよりとかアホかw

686 :NAME IS NULL:2023/08/15(火) 15:27:12.34 ID:???.net
>>683
そこにはいくつか、これまで書かれていない仮定が含まれているわけだな。

- 商品は入れ替えが激しい
- 商品マスタの他に購入履歴テーブルがある
- 購入履歴の保持期間は長い
- 購入履歴は商品マスタ(あるいはその履歴)を参照する

前提を明確にしてやれば簡単な話で、購入履歴が保持される限り商品マスタの履歴(あるいはそのうちの必要な情報だけ)も
保持されるようにすればいいということだろう。

>商品が廃番になったらどうするつもりなんでしょう

上の話からの繋がりがよくわからんが、その場合なにか問題が考えられるかね?

687 :NAME IS NULL:2023/08/15(火) 15:33:48.89 ID:???.net
書かれていないというか、

>一般的にはずっとは保持しない
>決められた保持期間をすぎれば古いものは整理する
>店や商品によるけど一般的な小売ならだいたい3年は保持してる
>改定後でも履歴の参照や分析用途に使う

これを書いた人が答えてくれないと困る事でしょう

>>552 この人に聞いて下さい。
隠れてないで出てきてよ

688 :NAME IS NULL:2023/08/15(火) 15:40:31.05 ID:???.net
3年は、この人が言い出した数字
古いものから整理するも、この人が言い出していること
参照も、この人が言い出したこと

全部この人が起源
色々根拠聞きたいなら、>>552 この人に聞いて下さい

689 :NAME IS NULL:2023/08/15(火) 15:42:31.65 ID:???.net
私は、この場ではぐらかしをしている人が、本人だと思ってる

690 :NAME IS NULL:2023/08/15(火) 15:43:20.43 ID:???.net
聞くべき相手は、>>552 なのに、それをしようとしていない

691 :NAME IS NULL:2023/08/15(火) 16:03:34.15 ID:???.net
>>688
仮に>>686の仮定を追加したとしても、そこに書いたように商品マスタ履歴も必要な期間保持すればいい話。
購入履歴は10年だとか客の問い合わせは期限がないとか後付けで言いだしたのはあんただろ。
それで3年で足りないというなら期限を延ばせばいいだけ。設計には何の影響もない。

692 :NAME IS NULL:2023/08/15(火) 16:08:41.68 ID:???.net
というかもともと気になってたのはこっちなんだよな。
必死にはぐらかそうとしているようだけど。

>3年毎にマスターのテーブル設計が変わる

>残す料金のカラムは消せないんだから、料金改定の度に増えるんだろう

いったいどんな設計を想定していたんだか。

693 :NAME IS NULL:2023/08/15(火) 16:17:03.83 ID:???.net
>>552に教えてほしくて仕方がないやつww

694 :NAME IS NULL:2023/08/15(火) 17:11:24.85 ID:???.net
>>552はベテランの経験豊富な設計者だぞ
蘊蓄聞いても損はないだろう

>店や商品によるけど一般的な小売ならだいたい3年は保持してる

何百件案件片付けたんだろう

695 :NAME IS NULL:2023/08/15(火) 17:13:46.94 ID:???.net
客が過去の買い物について問い合わせてきたら
消したデータを復元して対応するんだろうな
3年より前はふつう消すんだそうだ
設計には影響ないそうだ

696 :NAME IS NULL:2023/08/15(火) 17:33:19.32 ID:???.net
で、DB設計には関係ないってのは理解できたか?それともまだ理解できないか?

697 :NAME IS NULL:2023/08/15(火) 17:45:31.61 ID:???.net
3年保持するは単なる要件の一つで
じゃあ3年たったら削除するような管理するDBの設計はどうするのかってだけなのに
3年3年バカの一つ覚えでいってるやつはほんとに設計したことないのがよくわかる
恥の上塗りに上塗りを重ねて何をしたいのかもわからなくなってるんじゃね
明日か明後日から仕事だろもうおとなしくしてロw

698 :NAME IS NULL:2023/08/15(火) 17:48:58.75 ID:???.net
>決められた保持期間をすぎれば古いものは整理する
>店や商品によるけど一般的な小売ならだいたい3年は保持してる

単なる要件じゃなく、このベテラン開発者の経験値なんだそうですが

699 :NAME IS NULL:2023/08/15(火) 17:57:36.97 ID:???.net
3年って言いだしたの、>>552 ですよ
この人は設計したことあるんでしょう?

700 :NAME IS NULL:2023/08/15(火) 17:58:49.16 ID:???.net
しかも、削除はとても複雑になりそうだし
なんでこんな設計するんだろうって興味が湧きます

701 :NAME IS NULL:2023/08/15(火) 18:09:41.29 ID:???.net
>しかも、削除はとても複雑になりそうだし
>なんでこんな設計するんだろうって興味が湧きます

またw
いったいどういう設計を想像したのか非常に気になる

702 :NAME IS NULL:2023/08/15(火) 18:12:54.40 ID:???.net
期日が来たからって削除できない事は理解できますか?
この料金値を使ってないことを確認しないとだ駆除できません

703 :NAME IS NULL:2023/08/15(火) 18:25:37.02 ID:???.net
>期日が来たからって削除できない事は理解できますか?

まったく理解できないが、それは上で言っていた購入履歴の保持期間の方が長いからという話?

>この料金値を使ってないことを確認しないとだ駆除できません

ふつう、販売価格マスタの有効期限を過ぎて購入履歴が発生することは考えにくいが
どういう前提を想定しているんだろう?
仮にそういうものがあったとしても、どっちにしろ購入履歴側で販売価格情報のキーを参照しているなら
簡単に判断できる話だな。それともこれが「とても複雑になりそうだし」ってことなのかね。

704 :NAME IS NULL:2023/08/15(火) 18:27:20.98 ID:???.net
3年経ったら消してしまうから、
4年目にクレーム来るとパニックですね

705 :NAME IS NULL:2023/08/15(火) 18:30:28.32 ID:???.net
ログインしてユーザーが購入履歴を見るページ作ってたら、
4年以前には何も買ってないことにされます
分析用途に使うのも諦めないとね

706 :NAME IS NULL:2023/08/15(火) 18:33:58.53 ID:???.net
ネット通販業務に関われば判るけど
お客の購入履歴なんてそれこそ宝物ですよ
販促にも使えます
ふつう消さないと思う

707 :NAME IS NULL:2023/08/15(火) 18:43:56.34 ID:???.net
既に>>686で書いたことなんだが、やっぱり抽象的な書き方だと理解できない頭なのかね?
購入履歴から参照するから保持しなければならないというなら必要な期間保持するか、
あるいはその問い合わせへの回答に必要な情報だけ持たせるなりすればいいだけの話。

708 :NAME IS NULL:2023/08/15(火) 18:54:39.93 ID:???.net
そもそも削除する必要が無いです

709 :NAME IS NULL:2023/08/15(火) 19:30:48.93 ID:???.net
自分の案件と他所の案件の区別ができてない。
https://www.adhd-coach.org/adhd

710 :NAME IS NULL:2023/08/15(火) 20:17:59.92 ID:???.net
>>708
削除しないとDB肥大化するからそれを見越した設計にしないときつくね?

普段構ってもらえなくて今回みんなに構ってもらえてうれしいのかしらんけど
バカにされてるってわかってないのが悲しいよな

711 :NAME IS NULL:2023/08/15(火) 20:22:29.77 ID:???.net
とうとう本人が名乗り出ることがなかった
さすがに恥ずかしいと思うんでしょう

勝負付いちゃいましたね

712 :NAME IS NULL:2023/08/15(火) 21:08:24.33 ID:???.net
削除してはいけないって要件を前提にしてるひとが一人いて
削除する話に削除してはいけないって噛みついてただけ

713 :NAME IS NULL:2023/08/15(火) 21:11:28.69 ID:???.net
日本語が変

714 :NAME IS NULL:2023/08/15(火) 21:18:16.10 ID:???.net
めっちゃ盛り上がってるやんw

715 :NAME IS NULL:2023/08/15(火) 21:45:55.77 ID:???.net
とうとう勝利宣言出ちゃったね。これも藪の中か。

>3年毎にマスターのテーブル設計が変わる

>残す料金のカラムは消せないんだから、料金改定の度に増えるんだろう

>しかも、削除はとても複雑になりそうだし
>なんでこんな設計するんだろうって興味が湧きます

716 :NAME IS NULL:2023/08/15(火) 22:23:58.96 ID:???.net
勝利宣言w出たから駆逐してやろう

>>552ではユーザーの購入履歴の話は一切してないぞ
取引時の価格を決定するためのマスタから古いレコードを削除する話をしてる
実際の販売価格はマスタへの参照じゃなくトランザクションデータに直接記録する(これ常識な)
税法上も会社法上も特に保存義務はない

仮に保存義務対象だとしても販売管理で使ってる業務DBに保存しておく必要は全くない(これも常識な)
アーカイブして業務DBを軽くするのはどこでもやってること

であとなんだっけ?

717 :NAME IS NULL:2023/08/15(火) 22:32:33.37 ID:???.net
ああ、>>552の内容とは関係ないけどユーザーの購入履歴をいつまで保持するのかって話か

これはビジネス次第だからな
短いところもあれば長いところもある
ユーザーが確認可能な期間と会社が内部的に持ってる期間が違う場合も多々ある

ユニクロみたいに15ヶ月で確認できなくなるところもあれば
Amazonのようにずっと持ち続けるところもある

ちなみに3年っていうのはさっき書いた通りユーザーの購入履歴の話とは全然別な
過去の価格推移を履歴として確認する話
一般的に商品の発売時期やキャンペーンは季節性があるから
価格改定時や新商品の価格設定時に前年・前々年・前前々年くらいまでの確認をして検討するため
価格設定時じゃなくもっと全体的な分析用途なら
業務DBじゃなく違う形式に変換して別の保持期間が設定される

718 :NAME IS NULL:2023/08/15(火) 22:53:32.10 ID:???.net
本人登場でなければもう意味がないよ

719 :NAME IS NULL:2023/08/15(火) 22:54:11.48 ID:???.net
あれだけ騒いだのに、逃げ回ってるんだし
勝利宣言もなにも、もう秋田

720 :NAME IS NULL:2023/08/15(火) 23:20:35.79 ID:???.net
完全白旗かよw
しょうもないやつだな

721 :NAME IS NULL:2023/08/15(火) 23:30:16.27 ID:???.net
こんな攻撃的パーソナリティのADHDがいる現場当たりたくない
あ、エアプか

722 :NAME IS NULL:2023/08/17(木) 14:50:44.04 ID:01LChGaU.net
別のテーブルにすればいいという発想も出てこないのはやばいなw

723 :NAME IS NULL:2023/08/17(木) 14:52:17.80 ID:01LChGaU.net
>>717
内部でどうデータを持っているのかと、表示されるのかは別の概念だろ?

724 :NAME IS NULL:2023/08/17(木) 15:09:33.01 ID:???.net
何を言いたいかわからない奴がたまにいるけど同じ奴なのかな?

725 :NAME IS NULL:2023/08/17(木) 15:13:38.04 ID:???.net
お前の仲間だろう、仲よくしてやれ

726 :NAME IS NULL:2023/08/17(木) 15:51:22.76 ID:???.net
ボラクル君のいいたいことはわからんでもないけど
それらが考慮されてないと考えてる辺りがボラクル君たる所以

727 :NAME IS NULL:2023/08/17(木) 16:37:48.51 ID:WcbB+pzF.net
日付が必ずNULLなら、それは同じエンティティじゃない。

728 :NAME IS NULL:2023/08/17(木) 16:39:10.05 ID:WcbB+pzF.net
意味の異なるデータを同じ入れ物に入れたがるやつとは関わりたくない

729 :NAME IS NULL:2023/08/17(木) 17:04:53.01 ID:???.net
回線切って家に閉じこもっておけば大丈夫だよ

730 :NAME IS NULL:2023/09/18(月) 16:03:15.22 ID:???.net
先生のけん玉の玉を完熟トマトに換えた奴ちょっと来なさい

731 :NAME IS NULL:2023/12/03(日) 23:58:10.42 ID:???.net
けん玉

732 :NAME IS NULL:2023/12/08(金) 18:59:39.94 ID:???.net
トマトは宇宙ステーションの中にありました
けん玉もたぶんそこです

733 :NAME IS NULL:2024/04/16(火) 13:22:50.56 ID:???.net
テスト

200 KB
新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
名前: E-mail (省略可) :

read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★