DB設計を語るスレ 10 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
>>120
へーっまじっすか。まじはんぱねーっす。早く何に噛み付いてるか教えてくださいよ。 とりあえずWikipediaの主キーの項を
100回読んできたら?
あとデータベーススペシャリストに合格するくらい勉強したら、良いと思うよ >>119
> 山田太郎Aと山田太郎Bを区別しないといけないなら
> そのためのカラムを持つべき
横からだが、それがサロゲートキーだろ >>123
サロゲートじゃなくて、自然キーで区別できるようなカラムが必要だろって事だろ >>123
むしろサロゲートキーは
> そうじゃなくて、山田太郎が二人いる事だけ分かれば良いなら
> 単なるユニークなだけのキーを振っておけばいい
の方だろ >>124,125
なるほど住所や何かで複合主キーにしろという事か
読解力がなくて悪かった
それでも不便な自然キーを優先させようとは理由がない限り思わんが >>127
要件による
てか、何と何の複合でやろうとしてるのかすらわからんのに正解かどうかきかれてもな >>128
そもそも住所は引っ越しとか町村合併で結構頻繁に変わるし ORMの都合とかで、すべての主キーを単独の連番にってのはみたことあるな >>127
複合キーでできるならそれでいいが、ハンドリングしにくいならそのサロゲートでもいい。
ただし複合キーでもユニークに特定できないものはサロゲートにしたところでやっぱりダメ。 >>130
氏名 住所 年齢
くらいで十分じゃあないの? >>134
生年月日ならまだしも年齢とか変わっていくものをPKの一部にするとか変わってるな いいじゃん毎年発生するデータなら。健康診断結果テーブルとか。 >>136
Aさんのここ5年間の情報頂戴って言われたらどうするつもりなんだ? w やりたいこと次第で「できます」か「できません」のどっちかでしょ?
「Aさんは今何歳?」
「今年は西暦何年?」
「今年は昭和何年?」 >>134
年齢を生年月日にするにしても
同姓同名の誕生日も同じ人が
ルームシェアで同じ家に住んでる可能性がある以上
十分とはいえない 同姓同名、同じ誕生日で同じ場所に住む人が2人居ても良いと思うし、
そういう風にDBに入るなら、間違いではないし誰も困らない まだ続いてんだ、これ。
>>33すら放棄してんのに
お前らヒマなんやな w 提示されていない条件を仮定しても意味が無いと思うけど 氏名も住所も年齢もすべて値が変化するものだと気づかない時点でダメだな。 この世に変化しないものなんかないんだから主キーだって変化すればいいじゃない 「昨日?そんな昔の事は忘れた。
明日?そんな先の事は分らない」 >>146
それな
なのに>>101が連番ではダメと難癖つけたから脱線しただけだよ 「連番付けとけばいい」「連番じゃダメ」
どっちが一方かだけが提示されていない条件を仮定したかなんて決められるもんかねぇ。 「連番じゃなきゃダメ」はどこいった?
唯一の条件を問わない正解なのに >>146
回答するに当たって条件があるなら示しとかないとな
>>147
>>101は自然キー(候補キー)の必要性の問題を連番が問題だと勘違いしてるからな
>>152
>「連番じゃなきゃダメ」
そもそもそんな主張がどこにあった? それは「唯一の条件を問わない正解」なんて言っている時点で触っちゃダメな人。 誰でも簡単にパソコン1台で稼げる方法など
参考までに、
⇒ 『宮本のゴウリエセレレ』 というブログで見ることができるらしいです。
グーグル検索⇒『宮本のゴウリエセレレ』
NULCDBFZ4S DB勉強中です。
Primary Keyがないテーブルを使うと何か問題が起こりますか? テーブルが問題を起こすのではない
おまえが問題を起こすのだ 例えば同姓同名の人がいたとして
その人から自分の電話番号変わったから変更してって言われても
どちらを更新して良いか分からない(=人間)
全部書き換えようとする(=DB)
こんなことが起こる
普通は一意性を確保するために、
社員IDやら学生IDやらマイナンバーやら
他と重ならないキー情報を用意して、
それをPKにしている。 >>158
そういうのは履歴を取る設計にするのが普通なんだよ。 マスターは最新の状態で良いと思う
そんなに頻繁に変えるとは思わないし
履歴は履歴レコードで残せば >>161
あくまで俺の予想だけど
そういうのは履歴を取る設計にするのが普通なんだよ。
って言ってるんだと思う >履歴を取る設計にするのが普通
すっげーー含蓄のある台詞でした
来年はこれを使おう >>162
>>158からそれが読み取れるとしたらよほど天才か知ったかのアホとしか思えんが w >>164
勘違いクンはお口にチャックやでえwwww
おまえほんまにアホやなあwww またこのパターンかよ...
具体的になにも指摘できないなら絡んでこなきゃいいのに w >>166
絡んできたのお前やろがwww
脳ミソおかあちゃんのアナルに忘れてきたんかお前はwwwww ,、‐'''''''''ヽ、
/:::::;;-‐-、:::ヽ _,,,,,,,_
l::::::l _,,、-‐"iiiiiilllllllllllliiiiii、__ゞ:::::::::::`ヽ,
ヽ::`/: :::..: iiiiiilllll||llllliiiiii: : : : ヽイ~`ヽ:::::::i
. /;,..-;;;;;;;;;,,,,, : l|l: : : : : : : : : : : : : \ ノ:::::}
/: /: : "" ""::::..... ;;/´: `ヽ : : : : : :ヽ:::ノ
. !: : : .,,ぇzv、..,::;: :::: '^W;;a=z_: : : : : : :.!
|: : : :.`'':::.:;;'`::.; .:.:: -z-a:、,, : ::<iiii|
|: : ::. ..:::::.. `.':::':::''^ ´ : : : :.| みんないいこだから
|:::..... .;'' '::::::;;i;.. ..:;; : : :i けんかはやめよう
/:.ト;;;;;;;;.......'ヾ ::.::;iii;;ノ: :.. ..;;,.イ: : :.i
 ̄|: ::';;;`':::;' ,,、`,,' '::::;;,,,,;;;::'''::::<iii/
. /!.: ::. ヽ.'',,,,::;;;v;;;;;:.... '''' :-─/─
ヽ :. .... ヾ;i;f",,i",_i.j;;;''"".. ,,:ヽ/
\;::: ヾ';;;;;;;;;;;::''' ...::'':: ,,::::::/\
`''‐、、__  ̄ ̄ __,,,,、-‐"
. //:::::/ヽ ̄ ̄ ̄ ̄ノ::::/\
. / /:::::/ ` ̄ ̄ ̄/:::::/. \ 運用の経験がないとデータの変化を追えないとたいへんなのがわからないのだろう。 データの変化を追えなかった、その経験談良かったらここに書いて貰えます? >>170
人的データパッチミス、プログラムの変更、追加によるバグが変なデータを作り出す。 >>169
ふーん。全てのデータをinsertとフラグ列のupdateとかで更新してくってこと? 大規模なシステムに関わったことがないと理解できないだろう >>173
履歴レコードの話だよ。マスタデータでもトランザクションデータでも追跡できないのは運用で困る。何がどうなったのか他人に説明できないだろうが。 トランザクションデータてそれ自体がログやからトランザクションなんやで
トランザクションの記録を更新すんなアホw この人のシステム、怖くて触りたくない
よっぽど酷い人たちで開発してそう 世の中には常に数百人が関わってるシステムがあるんだよ。こういうシステムだと何が起こるかわからない。 >>156
履歴を記録しろと言い出す謎の勢力が襲い掛かってくる 履歴が一種のイベントとして成立しているなら記録すべきだよね
(例えば売上とか)
そうじゃないなら必要性が理解できない ここ設計スレだし
履歴が必要なら履歴とるように設計すればいい
履歴とるように設計されてないから苦労したとかならしらんから
運用の話は別スレでやってくれ トランザクションって言葉のイメージする範囲が広すぎてかみ合ってないところがあるな
単にマスタじゃないデータという意味合いでトランザクションって言ってる場合があるけど
この場合は当然そのテーブルが更新されたりする
もっと狭い意味でトランザクションって言ってるなら、トランザクションなんだから追加しかありえないだろ
それを更新するとかありえないって設計もある まあ履歴が必要なシステムもあるんだろうけど>>158からいきなり履歴とか数百人が関わるシステムとか言い出してて笑える 業務的な必要とSQLの仕様ってだいぶ乖離してるよな
DDLは基本1件ずつしか触れないようにしといてほしかった
手動で操作するのこわい DMLじゃなくてDDL?
業務でどんなSQLを実行してるんだ?
まあDMLにしても1件ずつとかありえんけどな
SQLは手続き型じゃないんだよ 運用中のテーブルにカラムを追加する場合、どこに追加しますか?
末尾に追加しますか?それともデータ型やカラム名が合う場所に追加しますか?
くだ質ですが、気になるので教えてください。 >>189
問題はありません。
ですが、DB設計的に揃えるのが通常かな?と思いまして >>190
そもそも間に挿入できると思っているのか?
列順が変わることを想定していないプログラムへの影響、列順が違うのだけなのに運用を止める、データの移行のミス等、面倒なことばかりで普通はやらない。 >列順が変わることを想定していないプログラムへの影響
さすがにそこまでは面倒見きれんw 本来のリレーショナルデータベースなら, 列の順序はないのでは?
実装上で問題があるケースってあるのかな? たとえばカラム一覧が
id,name,address,telephone,comment,date
だとする。そして「携帯電話」を追加したい。
こういった要件の場合、
id,name,address,tel,mobilephone,comment,date
ってしたくならないか?
id,name,address,telephone,comment,date,mobilephone
だとなんか納まりが悪いじゃん 修正。2番めに書いたのが無駄に削ってしまった。
id,name,address,telephone,mobilephone,comment,date >>196
言いたいことはわかるけど、
本来リレーショナルデータベースにはそうした順序性が存在しない >>198-199
いやだから、気になりませんか?って話です。
本質とかルールがどうこうではなく、心情的な面で。 気になるもクソもRDBってのは「集合」を扱うもんなの
そして集合には順序なんて概念はないの >>199
もちろん、ユーザに見せるときにはSQLではなくプログラミング言語で調整しているよ じゃ、テーブル設計書作ってるときとかphpMyAdminを利用してるときとかなんでも良いです。
順序がないけど順序を視覚化しているツールを使っている時に、
カラム名やデータ型が異なる順番で並んでると気になりませんか?
単に気持ちの問題ならどうでもよくても、仕様書にした場合、
順序がバラバラだとミスや勘違いの原因になりやすいのではないでしょうか? >>203
気にはなるけどリレーショナルデータベースとはそうしたもんだ
仕様とはまったく別の話
ある順序通りに列を並べたいというのが仕様にあればアプリ側で対応すべき話であって
その順序をDBに持ち込むことがおかしい >>204
つまり、
>>196の要件で「携帯電話」を追加したい場合、
id,name,address,telephone,comment,date,mobilephone
で良いということですか?
これは順序も何も考えて無くて、単に末尾に追加しているだけです。 >>205
何度も言っているように、DBはそれで良い
というか、そこで順序にこだわることがおかしい
ユーザ側に見せる時には、プログラミング言語(JavaやC#やPHPでもなんでも)で調整すべき 205はリレーショナルモデルの勉強をした方が良いのでは 順序にこだわるのは、>>203にも書いたとおり、
仕様書なり設計書なりを見た人物(自分含む)が
誤認しないか?正しく伝わるか?と思ったからです。
過去にカラム追加が必要だと思ってたら、既にあったということがありました。
正規化しても1テーブルに100近いカラムが並ぶこともあるわけで、
とかく順序を意識して行いと、そういった不具合や誤認が生まれます。
リレーショナルデータベースとしては何が正しいか・正しくないかではなく、
扱うのは人間です。人間にわかりやすいのが一番だと思っています。
その上で出た疑問です。 たとえばMySQL「AFTER」というコードが有るのも、「指定位置に追加したい」
という需要があったからこそ用意されたのではないでしょうか?
そうでなければ末尾でも良いわけです。 何のためにほとんどのアプリでUIが別途あると思っとる
そういう整形はフロントエンドの役目 >>209
まさかと思うけど
リレーショナルデータベースをphpMyAdminで直接編集しようとしている?
(そんなはずはない、と思いたい)
>カラム追加が必要だと思ってたら、既にあったということがありました
というのは、単にモデリングの欠陥を言っているだけで、
>正規化しても1テーブルに100近いカラムが並ぶこともあるわけで、
これもよくあるアンチパターンで、1テーブル100カラムというのはほとんどが設計ミス
>人間にわかりやすいのが一番だと思っています
とか言い訳しているけど、単なる知識不足にすぎないのでは teratailを見ると以下のように回答している人がいました。
「カラム位置のパフォーマンスへの影響ですが、一般的にRDBMSは可変長カラムを後ろに持っていった方が性能は良いです。可変長カラムより後ろのカラムに対しては、実際のデータ長を見て毎回オフセットを計算する必要があるためです。」
これを読み解くと、カラム位置って大事じゃないんですかね?
この回答者が間違っていると言われればそれまでですが。 >>213 DBの実装に依存する
これまでの君の主張は見た目の順序のことだから
的外れの突っ込みだぞ どうしてもやりたきゃ
別テーブル作ってそこにコピーしてリネームすれば それこそ無駄じゃないですか?
MySQLに順序変更に関するコマンドがある以上、
私の質問ってそんな的外れじゃないと思うんですけどね
「DBに順序という概念はない」っていう意味はわかりますけども。 DBに依存する処理だけど、やりたければやれば良いのだと思うよ
>>216 の動機はやはり的はずれだと思うけど
みんなが言っているようにアプリで対応するのじゃ駄目なの? まあしかし、心情的には理解できなくもない
最終更新日や削除フラグ(笑)の後ろに項目あると、ああ、あとから追加したんだなと切ない気持になる
DBMS的にはカラムは後ろにしか追加できない場合がほとんどだろうけど
GUI系の管理ツールだとテーブル作り直して間に追加したかのごとくしてくれる物もあるぞ >>216
また馬鹿が調子こいてでまかせ言ってたみたいだなw
迷惑かけてすまんのうw
×:「DBに順序という概念はない」
○:「関係モデルに順序という概念はない」
RDBMSの標準SQLでは定義された列の順番が存在する
よってお前の質問は全く的外れではないし
後から途中に列を挿入するという仕様変更も間違いではない >>219
「DBに順序という概念はない」は216だけが言ってるんじゃないかな
そして標準SQLでは, 途中に列を挿入する処理は存在していないんじゃない? >>220
少なくとも質問者である私は「DBに順序という概念はない」って言っていません。
回答者がそうおっしゃるから、自身の知識を改めただけです。 ■ このスレッドは過去ログ倉庫に格納されています