DB設計を語るスレ 10 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
>>428
何の為にDBに登録するのか、その目的次第だと思う
小売店での現金販売だとそこまで細かくデータはとってないだろうし
そこまで細かくデータが取れるとすれば通販でクレジット決済したときくらいか >>428
例示のレコードでレコード長40byteくらいだとする
1日100万でも40Mとかだから現代ではそこまででもない 小売店で取れるデータって、POSレジの範囲だぞ
個人を特定可能なデータはとってない
特定可能なポイントカードを使わせれば良いかもだが
すべての客が使う訳じゃないからな >>428
> 1日で日本全国で百万レコードとか行っちゃいますよね?
今時そこら辺に転がってるPCでもヤ楽々処理できるレベル
1億レコード超えたら本気出す 顧客のだけでなく業者からの仕入データだって膨大になるだろうに毎日テーブル作ってたらどうなるんだよ >>428の例で、毎日テーブルを作るとしてさ、
「今年会員IDa01が購入した商品全部抽出して」って言われたらSQL文てどうやるの?テーブルを365個SQLに書かなきゃダメ? 本だと
購入日、性別、年代、書籍コード(ISBNや雑誌コード)、冊数が
届いてたなあ パーティショニングはしてるかもしれんが、テーブル毎日つくるとかないわ ようつべとか、視聴履歴をめっちゃ昔まで遡れるやん?
数億人が毎日見てるんだぜ?考えるとすごくね?しかも検索結果の抽出も早いしどうなってんだ 厚さ0.1mmの新聞紙でも42回折ったら月まで届く高さになる つまり月まで届くほどデータがあっても
検索にかかる時間は0,1mmのデータのたかだか42倍 0.1mmの42倍て4.2mmじゃね?それで月まで届くの? しかし折り方を指定してないからな
蛇腹だとたしかに月までどころか5mmにもならん よってYouTubeの検索速度を再現する事は不可能である YouTube を実際に使っているユーザーがいないんじゃ? YouTube を仮に使ってるユーザーぐらいいるんじゃね? 特殊な炭素素材で水を水素と酸素に分解 ゼビオHDのグループ企業、クロステクノロジーラボが開発 500項目超とかの巨大テーブルいい加減ヤメてほしい >>452
DBMS何使ったらそうなんの?オラコー? 紙の業務の置き換えで
10明細x50の伝票!あと10年は変更ありません!
とかだとよくやる。官公庁だあとありがち。
正規化するといちいちJOIN書かないといかんし >>452
見たのは確かOracle
項目多過ぎでSQLが実行できない 主キーをサロゲートキー(serial)にするか、複合カラムの組み合わせでUNIQUE制約をつけて主キーっぽく使うかで悩んでいます。
問題なのが、このテーブルはレコードを削除した後、復活(再度、新規登録)させる必要が出てくる可能性があることです。
その場合、復活させた時に番号が変わるserialを主キーにするのは、ありえないですよね? そのDBがserial値の明示的挿入を許して、それが滅多に起きないんならなくはないんじゃね
それ以前におれなら復活必要なら論理削除にしとくが データレコード削除してもサロゲートキーのマスター残しておけば問題ないんでないの。 サロゲートキーのマスターとは?
ここで言ってるserialってのは、システム側で管理して勝手に数値入れてくれるものだと思うが 単なるserial;はふつうサロゲートキーとは言わんだろう。
>>457のように一意性を保証する複合主キーが存在したうえでその代理とするのがサロゲートキー。
んだから元の複合主キーとserialからなるのがマスターだしそれが自動採番されることは矛盾しない。 で、データレコード削除しても残るサロゲートキーのマスターって何?って話だが
自動採番(システム管理)される値をサロゲートキーにするって前提じゃないの? だから複合主キーとサロゲートキーの対応表だよ。そう書いたつもりだったが。
>>457のようにデータ再投入時にサロゲートキーの値が変わるのを防ぎたいなら
そういうマスターを残しておけばいいという話。
採番が自動か手動かはこの際関係ない。 >>463
そういうマスターを残すには手動でそういうマスターを作らないとダメなわけで
前提を合わす気がないならちゃんとそういっとかないと議論にならん serialを変えたくないってことは、
その様な使い方を別なところでしているんじゃないかな
ログとか履歴とか >>464
既に何度も書いているが、そのマスターのサロゲートキーはserialで自動採番して全然問題ないんだが?
あるいは、もともとデータテーブルが1テーブルだったものをマスターテーブルと分離したことを言っているなら
そりゃ当たり前だ。そう提案したんだからな。 大阪市は2019年6月24日、6月7日から翌8日にかけて発生した基幹系システムの障害に
ついて、原因を特定したと明らかにした。米オラクル(Oracle)のデータベース(DB)ソフト
「Oracle Database」のバグが原因だった。
https://egg.5ch.net/test/read.cgi/bizplus/1561468154/ やっぱ脱Oracleだな
ろくに保守サポートされないんだから有料契約の意味がない でも金で解決してくれるサポートがなけりゃ、問題がDBMS側にあることを
突き止めることすら自前でやらなきゃならんのだぜ。 突き止めることに意味がないからな
責任転嫁のための作業であって
復旧にはどのみち問い合わせじゃ間に合わん 原因がわからなきゃ対策のとりようもないだろう。
「たまたまエラーになったけど原因がわからないからまた起きたらゴメンね。」で済むような仕事ならいいが。 オラクルは、問題がDBMSにあることをつきとめるんじゃなくて、その問題をまず認めてもらうのにサポート窓口が必要なんだよ
あとは直ればラッキーぐらい > 大阪市で住民票などの証明書発行業務を担う基幹システムが停止。復旧まで21時間を要し、
> 8000件近い証明書発行業務に影響が及んだ。原因はOracle Databaseのクラスタ機能に潜む
> バグだった。ネットワークの不調をきっかけにシステムが停止し、再起動もできなくなった。
> 米オラクルはバグの存在を把握しながら対外開示をしていなかったとみられる。
https://tech.nikkeibp.co.jp/atcl/nxt/mag/nc/18/020600011/070200035/ それゆえMySQLとかPostgreSQL移行が進んでる デシジョンテーブルのつくりかたがわからん
値の組み合わせ全部入れるもんなの?
null値はすべての検索値にマッチとかルール決めて行数減らしたけど
わけわかめになった 売上を管理するテーブルを設計したいんですが、
後になって、同じ商品コードに別の商品が割り当てられる事も想定して設計する場合、
売上テーブルには、商品コードと商品名と価格すべてを登録するのが普通でしょうか?
※売り上げに登録する商品は、商品コードと商品名と価格だけで管理すると仮定します。 >>478
その意味のない商品コードとやらで何をしたいんだ?
商品名と価格だけでいいだろ >>478
商品マスタに有効期間を作るのが定石かなあ
ついでに言うと当時の単価もマスタ側で
売り上げは数量かなあ
(集計用に金額持たせることはある)
あと消費税の扱いをどうするかとか考えておいたほうがいい >>478
自分ならというか自分が作ったシステムの売上データは個数、単価、価格などを保持してる
マスタから参照するのはコードと商品名ぐらい
マスタのコードは別の商品に変わる可能性があるなら売上データと商品マスタを結合するキーは
商品コードでなく商品マスタのサロゲートキー >同じ商品コードに別の商品が割り当てられる事も想定して
これがどういう状況を表しているのかはっきりさせないと設計も決められないだろ。
少なくとも「商品コード」で「商品」を特定できないことは読み取れるが、じゃあ
「商品コード」と「商品名」であれば特定できるのかそれともそうじゃないのか。
できるなら>>478のままでいいが、できないならばそれを特定できる情報を
追加しなければならない。 同じ商品コードを別の商品に割り当てるって言うんだから、ある商品の商品名を
変更するって話とは全然違うわな。 商品コードが一意にならないって理解しにくいんだが
商品コードを仕入れ先の企業が決めてくるって事? おそらく現実の問題ではなくて、>>478が深く考えないで書いた脳内想定だと思う。 現実的に、商品コードが一意にならないような要求をする客はいるぞ
もし本当に
>売り上げに登録する商品は、商品コードと商品名と価格だけで管理する
のならば、全情報コピーでいいだろ
現実的にはそんな単純な管理条件にはならんけどな >>487
> 現実的に、商品コードが一意にならないような要求をする客はいるぞ
そりゃいるだろうよ
だから外部とやり取りするためのコードと内部で処理するためのコードは別に持ったりする 横着して客が提示した項目だけでまかなおうとするからコケル >>467
ラックに限らずクラスタリングってもしもの時のバックアップとしては全く信用できない。
基本的に運が良ければダウン時間が短く済むかも程度で考えて、データのみ同期させる予備機もっとかないと。 カラムに日本語使わないほうがいい
でもPHPでカラムを見ながら弄りたい
PHPやらhtmlでいちいち書くのは面倒くさい
ってんで、カラムの名前の日本語対応データだけもったtable作る
ってのは変ですか? 日本語っていうか、論理名を物理名とは別に持って管理するのは珍しくない >>492
ありがとうございます
論理名 物理名というのですね
参考になる文献が結構出てきて助かりました 多少長くなっても意味の通じるカラム名で管理した方が楽かな >>493
項目名が頻繁に変わるという仕様が本当に必要なのか考えた方がいい。 どこから項目名が頻繁に変わるという仕様を導き出したんだ まあ強いて言えばわざわざ
> カラムの名前の日本語対応データだけもったtable作る
ってところじゃね? お腹がすいていませんか?
ウーバーイーツの利用者が初めての方は eats-5kqyfp のプロモーションコードを使うと、#Uber Eats の初回注文が ¥1,000 割引になります。https://t.co/Wxur8AeoEf 👀
Rock54: Caution(BBR-MD5:b73a9cd27f0065c395082e3925dacf01) PHPからデータを入力することを考えているのですが、初心者ゆえ取っ掛かりがわからなくて途方にくれています
例えば、
歴史的建造物のテーブルと
国のテーブルが有るとします
建造物のデータを入力する時に建造物の国カラムに、国のテーブルからオートコンプリートで入力したい
という場合、オートコンプリート用国候補のデータを"国"テーブルから取得して提示
という流れでいいのでしょうか?
この入力段階では建造物テーブルにリレーション?や結合といった処理で"国"の関連付け考えなくてもいいという感じでしょうか? >>499
建造物情報と国情報が紐付いてないのに、なぜ「オートコンプリート」という言葉が出てくるのか? つか、建物入力して、国を絞るのか?
法隆寺は日本にしかないだろうに
国を入力したら、建物のリストを候補にだすってんなら、国と建物の紐づけが必要 法隆寺のデータをこれから入力しようって時に紐付けデータが先に存在しているわけなかろう。 オートコンプリート用国候補のデータを"国"テーブルから取得して すでに歴史的建造物のテーブル(にレコード)があるって前提ではないのか >オートコンプリートとは、ユーザーによるキーボード入力履歴を活用して、
>入力操作の軽減を図る機能の一つである。
>オートコンプリートに対応したソフトでは、ユーザーが入力したい言葉の
>冒頭の文字を入れると、入力履歴の中から冒頭の文字が一致するものを
>候補として一覧で表示する。候補は、文字を入力していくごとに絞り込まれ、
>その一覧の中に入力したい言葉があれば、ユーザーは残りの文字を入力
>することなく、一覧から選ぶだけで入力が完了する。
こういうことなんじゃ? >>501
>>503
>>506
>建造物のデータを入力する時に建造物の国カラムに、国のテーブルからオートコンプリートで入力したい >>508
だからどうしてそんな変なことを言っているのか? 変なことっていうのは違うな
誰でも考えつくことだし >>499
・国名入力欄
・建造物名入力欄
があって、「国名入力欄に入力する際に国名をオートコンプリートしたい
(“に”って入力したら“日本”が候補にでてくる)」って認識でOk?
それとも「国名を入力したら建造物名入力欄の候補が絞り込まれる」ようにしたいってことを言ってる? >国のテーブルからオートコンプリート
>オートコンプリート用国候補のデータ
こう書いてあるんだから普通わかるだろ。 年取ると、書いてないことを読んだり、
書いてあることを読めなかったりします
私もそうだから、よく分かります 「利用回数が制限されているユーザーとされていないユーザーがいる」
という条件だとします。
このとき、finiteカラム(int)が99であれば、99回利用できるとします。
利用するごとに1ずつ減っていくイメージです。
では、「無制限に利用できる」を表現したい場合、finiteカラムでできるのでしょうか?
それとも、infiniteカラムなどを追加し、そこが1(有効)のユーザーは
無制限に利用できるというような、フラグ的な使い方をすればいいのでしょうか?
どう設計するのがベストプラクティスかわかりません。教えて下さい。 制限ユーザーかどうかを識別するカラムを追加か、
finiteが -1 なら無制限ユーザーとする、とか ベストプラクティスなんて、アプリの設計方法次第で変わるわ
とりあえずfiniteにNULLでいいだろ
NULLから1引いてもNULLだからな >>518
なるほど。-1って考えはありませんでした。
聞いたことありませんが良さそうですね。
>>519
int型のカラムにNULL入れちゃうのは抵抗があります・・・ 個人的には、利用上限と利用回数で項目分けたい
あとで利用回数調べたりしがちだから
基本、利用上限>利用回数で判定して
運用上、アホみたいに利用されないなら
利用上限をintのMAX_VAlUEとかにしとけば
実質無制限になるし、同じ判定で済む >>522
なるほど。その方が汎用性がありますね。
利用上限も制限がある場合は1〜99まで
無制限なら999とかにしておけばわかりやすいです。
-1だとorderの並び替えも難しいですが、999ならできますし DB設計をどうするかと、データ取得はどういう順にしたいかは別の問題 モンスターマップのhtmlのデータをDB化しようとすると,
どんなスキーマにしておくと後々使えるでしょうかね. Create Table MonsterMap (
HTML varchar(max);
); ■ このスレッドは過去ログ倉庫に格納されています