5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

データベースプログラミング全般スレ

1 :デフォルトの名無しさん:04/10/09 13:19:17
データベース板もあるが、あそこは過疎板だからこっちに立てました。
データベース関連のプログラミングならな〜んでもOK。
色んな話をしませまうる号。

2 :デフォルトの名無しさん:04/10/09 13:20:56
ドラゴンボール板に帰れ

3 :デフォルトの名無しさん:04/10/09 13:26:59
cdb最強。

4 :デフォルトの名無しさん:04/10/09 13:28:23
odbc最強


5 :デフォルトの名無しさん:04/10/09 13:59:39
>4
えー・・?
なんであの不細工なI/Fが最強ナンデディスカー?

6 :デフォルトの名無しさん:04/10/09 14:02:51
ado最強

7 :デフォルトの名無しさん:04/10/09 15:02:20
EOF最強

8 :デフォルトの名無しさん:04/10/09 16:43:21
>>1は早く氏ね

9 :デフォルトの名無しさん:04/10/09 16:48:52
>>7
ワロタ

10 :デフォルトの名無しさん:04/10/09 17:04:48
torque最強

11 :デフォルトの名無しさん:04/10/09 17:06:54
cache最強

12 :デフォルトの名無しさん:04/10/09 18:24:50
>>1
板違いです。
過疎などというのは言い訳になりません。

データベース板
http://pc5.2ch.net/db/

13 :デフォルトの名無しさん:04/10/10 12:35:31
過疎じゃん。w
それにまともなプログラミング関係無いから
こっちでいいよ。

14 :デフォルトの名無しさん:04/10/11 10:43:10
>>12
その板ほんとにバカばっかりだな・・・


15 :デフォルトの名無しさん:04/10/12 14:39:29
なんであそこまで過疎化するか不思議だったりする。

16 :デフォルトの名無しさん:04/10/15 01:03:59
データベースプログラミングって、ぶっちゃけつまんなくない?


17 :デフォルトの名無しさん:04/10/16 11:59:00
データペースプログラミングなんて本当はやりたくない
やってて楽しくない
作っててわくわくしない
(いや〜なドキドキ感はあるが)
しかしそれでもやらなきゃいけないのがプロのプログラマ

18 :新人ですが・・・:04/10/16 16:06:58
DBデータをCSVで出力するプログラムに
フィールドを一件追加する作業なんて最高だね!

19 :デフォルトの名無しさん:04/10/16 18:02:45
Oracleとかだと今のところまともなI/FがCOM/VBしかないなんて悲惨すぎる。
つーかプログラムから使うとなると、ODBCとか変な部分で敷居が高いんだよなあ。
SQL文発行させるまでが長いというか。


20 :デフォルトの名無しさん:04/10/21 00:49:30
>>16
確かにつまらん。でも、今はこれが一番金になるのよね。

21 :デフォルトの名無しさん:04/10/21 00:50:22
>>18
DB のデータを CSV で出力するのにどうしてプログラム書く必要があるんだ?
DBMS 側にそういう機能がついてるものもあるし、なかったとしても
ちょっと SQL 工夫すりゃすぐできるじゃん。


22 :デフォルトの名無しさん:04/10/30 11:08:50
問い合わせ言語(笑)

23 :デフォルトの名無しさん:04/10/30 11:31:18
標準問い合わせ言語


24 :デフォルトの名無しさん:04/12/10 10:50:38
以下はPrologの中でSQL風の記述をした部分なのですが、

select (顧客番号,商品番号,出荷日,数量,金額)
into X
from 売上
where 出荷場所='東京支店' and
出荷日>='20041207',

いかにも、SQL風ではありますが、Prologでは 論理式の and を "," で
表現していて、これが文法上の骨格になっており変更がむずかしい。
その結果、(顧客番号,商品番号,出荷日,数量,顧客番号)の
外側の括弧が外せず、既存のSQLの字面をそのままの形でPrologプログラムに
置き換えることができません。どなたか、
よいアイデアをお持ちの方いませんか。


25 :デフォルトの名無しさん:04/12/10 10:59:18
過疎化してるだけならいいんだが、
アフォしか残ってないのが遺体

26 :デフォルトの名無しさん:05/03/16 18:22:18
PostgreSQLとMySQLの違いを教えてください

27 :デフォルトの名無しさん:05/03/16 18:57:23
PostgreSQL 目くそ
MySQL 鼻くそ

28 :デフォルトの名無しさん:05/03/16 19:05:40
DB使う利点をおしえてくだしぇー。

29 :デフォルトの名無しさん:05/03/18 01:26:11
値段を大幅に吊り上げられる

30 :デフォルトの名無しさん:2005/03/21(月) 21:02:26
こんなプログラムできますか?
javaを使ってIDというか会員制みたいなHPを作りたいんだけど・・ヤフー、Googleとかが
IDとパスワードいれたらログインできたりするプログラムなんですが、プログラム辞典なんかで
調べたんだけど載ってないし・・・だれかわかる人いますか?


31 :デフォルトの名無しさん:2005/03/21(月) 21:22:17
>>30
あまりにもレベル高すぎてこの板の住人には無理だよ。

32 :デフォルトの名無しさん:2005/03/21(月) 22:10:51
うむ、難題だ。

33 :デフォルトの名無しさん:2005/03/22(火) 20:59:04
>>30
SSOでぐぐれ

34 :デフォルトの名無しさん:2005/03/26(土) 10:07:30
>>30
俺できるけど、総額が2京円くらいかかるよ

35 :デフォルトの名無しさん:2005/05/10(火) 21:24:18
QDBMを使っている人が居たら教えて下さい。
QDBMでは、1レコードに複数のデータを格納するには配列や自製データ型にして格納するしか無いんですか?
でもそうだとすると取り出すときにあるレコードの一つの値だけを取り出す事が出来ませんよね。
データの格納位置のイメージはRDBMSのテーブルみたいな
複数フィールドを作って1レコードにフィールドごとの値を格納するという形ですよね?
サンプルコードを読んでもチュートリアルを読んでも
キー1つに値1つを関連付けてるものしか見当たらないんですが。

36 :デフォルトの名無しさん:2005/05/10(火) 21:28:03
sqlite

37 :デフォルトの名無しさん:2005/05/25(水) 17:16:53
>>35
遅レスだが、、、
同一キーのレコードを複数入れたいのであれば、
BツリーのAPIを使えば可能だよ。カーソルも使える。

38 :デフォルトの名無しさん:2005/05/25(水) 17:32:37
>>34
兆の次の単位を覚えたばっかりでうれしいんだろうけど、
低脳丸出しだから以降気をつけた方が良いよ

39 :デフォルトの名無しさん:2005/05/25(水) 20:43:30
>>38
そうですね。
2ヶ月前のレスにいちいちけちくせーこと言うことないもんね。

40 :デフォルトの名無しさん:2005/05/30(月) 16:41:19
>>37
なるほど、確かにBツリーで出来ますね。
レスありがとうございました。

41 :デフォルトの名無しさん:2005/05/30(月) 16:41:50
>>39
発言の責任に賞味期限は無い。

42 :デフォルトの名無しさん:2005/06/01(水) 00:00:59
データベース関連の文書を読んでいて
「格納されるデータはスパースでない」と出てきたんだけど
これは、例えば100バイト区切りで区切る事にして70バイトのデータも30バイトの空白データを入れて100バイトに調整する
みたいな事はしていませんよ、って事ですか?

43 :デフォルトの名無しさん:2005/06/01(水) 00:02:33
C++ で O/R mapping できるライブラリでいいのない?


44 :43:2005/06/02(木) 20:56:48
20個くらいしかテーブルがなかったので、自動生成に頼らずいちいち書いたよ…


45 :デフォルトの名無しさん:2005/06/04(土) 11:24:55
チンポウェア氏ね。
文書無さ杉で、構文一つ探すのにも苦労する。

46 :デフォルトの名無しさん:2005/06/06(月) 10:43:28
>>45
DB板に専用スレがあって活発に書き込まれているじゃないかw

47 :デフォルトの名無しさん:2005/06/09(木) 09:22:30
QDBMのplusのサンプルコード、
書き込みとか読み込み処理で例外が発生した時にクローズされなくね?
マニュアルにクローズの時にDBは更新されるとか書いてあったけど、
これは例外発生時は全処理をキャンセルするからクローズされなくても大丈夫、と言う事を意味してるのか?

48 :47:2005/06/09(木) 09:28:14
openと同じ数しかcloseかけないみたい(closeが多いとコンパイルエラーになる)
だから例外処理中でクローズできないし
サンプルコード通りに書くしか無さそうだけども
本当にこれで良いんだろうか?

49 :47:2005/06/09(木) 09:37:50
あぁ俺がアホだった。
マニュアルの一番上に書いてあった。
明示的に閉じない場合はインスタンス破棄時にデストラクタで閉じられるらしい。

50 :デフォルトの名無しさん:2005/08/01(月) 01:59:10
DBMSでSQL文の構文解析をどのように行っているか知りたいのですが、
参考になる書籍、情報などご存知ないでしょうか。
とりあえずHSQLDBのソースコードを読み始めているのですが(まだ1時間ですけど)
それらしい部分にすら辿りつけてません・・・

51 :デフォルトの名無しさん:2005/08/11(木) 15:43:34
データベースの実装に関しての資料とかあまり見ないですね。
利用することに対しての資料は特定DBのものに関しては腐るほどあるのですが・・・。

もしよろしければ実装に関して何からの情報が書いてあるサイトとかありましたらよろしくお願いします。

52 :デフォルトの名無しさん:2005/08/11(木) 17:36:28
これからCを学んでいこうと思うが、
一緒に勉強していく人・いろいろと親切に教えてくれる人集まれ。

使っているサイト
http://www.cham.ne.jp/piro/
他にもサイトがあったらどんどん教えて( ゚д゚)クレ

みんなで頑張るのです。

53 :デフォルトの名無しさん:2005/08/11(木) 18:15:29
>>52
C言語輪講スレ
http://pc8.2ch.net/test/read.cgi/tech/1123177037/

隔離スレがあるんだから、そっちいけよ

54 :デフォルトの名無しさん:2005/10/20(木) 10:25:13
RDMSの勉強を始めた高校生です。
テーブルの各行の一つのセルに、可変の数の配列要素を記述したいのですが、どうするのが一番自然なのでしょうか。
実行時に、各行のユニークなIDを元にそれぞれ別のテーブルを作ってもいいんですが、パフォーマンスが気になります。
もしくは "hoge1|hoge2|hoge3|..."というように何か区切り文字を入れて一つの文字列にしてもよい気もしますが、定石的な方法があれば教えていただきたいと思います。
よろしくお願いいたします。

55 :デフォルトの名無しさん:2005/10/20(木) 10:26:52
>>54
正道なら別テーブル
それが正規化

邪道ならデリミタつけて可変長文字列にブッコミ
それがオレのジャスティス

56 :デフォルトの名無しさん:2005/10/20(木) 10:37:21
a|{b,c,d}
という行を入れたいなら
a|b
a|c
a|d
という3行を入れる。それがRDB。

配列をサポートしたRDBMSを使うという手もあるが。


57 :デフォルトの名無しさん:2005/10/20(木) 10:41:36
>>55
ありがとうございます。”正規化”という言葉を教えてもらって助かりました。
少し調べたところ、各行ごとに別表を作るのではなくて、全体で一つ、別に表を作ればいいわけですね。
データベースはツールとして使いたいだけだったので基本的なことも調べずにいたのが悪かったみたいです。


58 :54:2005/10/20(木) 10:42:44
>>56 第1正規形というやつですね。

59 :デフォルトの名無しさん:2005/10/20(木) 18:42:48
>>54
一冊、DBの本を読んでおくといい。
正規化の話は、おそらく1章か2章に書かれているはずだ。
最初は、ちょっととっつにくいが、特性をうまく生かせた時は楽しいぞ。

関係ないけど、O/Rマッピング楽しい。

60 :54:2005/10/21(金) 06:38:21
>>59
作りたいWebアプリケーションがあって(えっと、まぁ、とってもしょぼいんですが)、背後でデータベースを使いたいと
思ってのことだったんですが、考えれば考えるほど、データベース構造の設計が一番重要だという気になってきました。
ユーザーインターフェイスや他の部分への設計にすごく影響があるという意味でですけど。

あと、データベースの構造って一旦データが入るとあとから変更できないんですね(?)。(僕はMSDEというフリーのDBを使っていますが
これって普通のことなんですよね?)個人的には、開発の試行錯誤の最中だけでもいいので、構造を自由に変えられるととっても
便利だと思うんですけども。

データベースってそれ自体で結構面白いですね。おっしゃるとおり、まずは一冊ぐらい簡単な本を読んでみようと思います。
、、、といってまた本来の目的からすれば横道にそれていく自分がいてもどかしいです。


61 :59:2005/10/21(金) 08:30:14
>>54
ヒント: ALTER TABLE
コンバーターの自作も大した事ない。
dump して DROP DATABASE してから戻すのも簡単。

あとは、これでも読んでおけ。
http://www.rfs.jp/sitebuilder/sql/

もっと詳しい事は本買って DB板でもみとけ。

62 :デフォルトの名無しさん:2005/10/21(金) 16:47:15
>>28
超遅レス
DB使う理由

・途中でロールバックできる
・キーを間違えなきゃ複数のテーブルのデータがちゃんと更新される
・複数のプログラムから更新かけてもデータが壊れない
・作ったプログラムがこけてもデータが破壊されない


63 :54:2005/10/25(火) 18:18:11
再びすみません。本を一冊買って読み進めていますが並行して質問させてください、、、。

テーブルにデータををINSERTするときに、プライマリーキーが自動で割り振られるようにしています。
(具体的にはマイクロソフトのWebMatrixでテーブルを作るときにプライマリーキーのIsIdentity属性をtrueにしました。)
このIDENTITYキーを再利用したいのですが可能でしょうか。
たとえば、DELETE句で"N"というIDを持っていた行を削除したとします。次の機会にINSERTでデータを追加する際に同じ"N"というキーを使うようにしたいのです。


64 :デフォルトの名無しさん:2005/10/25(火) 18:25:36
無理、無駄、危険。
どうしてもやりたければ、「空いた番号」を覚えておくテーブルでも作れ。


65 :54:2005/10/25(火) 18:46:07
>>64
「無理」なわけですね。。
最初はIDを自分で管理できないかとも思ったのですが、トランザクション(始めは考えてもいなかったのですが)のことなどを考え始めると大変そうだと思い、
だったらIDの管理はデータベースに任せておいて、単にIDを再利用できればいいと思ったのですけど。


66 :デフォルトの名無しさん:2005/10/25(火) 20:17:54
>>62
・ある程度以上のデータを扱うときにはCSVとかと比べて圧倒的に処理が早い

これも追加してくれ

67 :デフォルトの名無しさん:2005/10/25(火) 20:32:39
・プログラム毎のファイル形式の違いを完全に吸収する
つうのは?。
DBを使う理由かぁ。それなりの本には必ず書いてあると思ったがなぁ。
使うのが当たり前過ぎて使う理由が見えにくいのかな。
使わないとどのような弊害が発生するかを想像するのが早道かも


68 :デフォルトの名無しさん:2005/10/25(火) 21:11:22
データベース触ったこと無くて、触るの怖いんだが、
途中で適当に項目や項目数増やしても、
プログラムほとんど替えずに動くの?

csvだとデータバージョン管理とか、構造変更した時の弊害とか、
データ拡張時の未フォローデータの扱いとか、
すげー拡張時の事で、頭いっぱいで破裂しそうなのだが…

69 :デフォルトの名無しさん:2005/10/25(火) 22:03:19
最初にキッチリ設計するのがDB

70 :デフォルトの名無しさん:2005/10/25(火) 22:08:57
>>66
「高速で便利なデータアクセス手段を提供する」ってことでいいんじゃないかな
なにしろSQLは便利だし、複数のキーや条件が絡む高速な検索方式を手で
実装するのはめんどい。

>>67
UNIXの/etc/passwordみたいなレガシーなデータベース(ただのファイル)
も、複数のプログラムからアクセスできる点では同じ。
ただし、データフォーマットはまちまちだが、現在はXMLのようなものもある。
それを「DBを使う理由」といってしまうのはどうか。

71 :デフォルトの名無しさん:2005/10/25(火) 22:09:47
>>68
変えずに動く「場合もある」としか言えない
普通はもちろんデータ項目増やしたんならプログラムを変更する必要がある

72 :54:2005/10/25(火) 22:48:38
>>63
自己レスですが、IDENTITYを使うのはやめて、

SELECT MyID+1 FROM MyTable WHERE MyID+1 NOT IN (SELECT MyID FROM MyTable)

とかクエリしてみて返された値を使って自分でIDを管理するようにしてみました。(いいんでしょうか?)


73 :デフォルトの名無しさん:2005/10/25(火) 22:55:06
>>71
その為のDEFAULT制約じゃないのか?


74 :デフォルトの名無しさん:2005/10/26(水) 00:04:45
>>72
・同時アクセスが来たら衝突する
・IDごときでテーブルにあるか調べてたらとても遅い


75 :デフォルトの名無しさん:2005/10/26(水) 17:00:39
プライマリキーにUUID使うのはダメですか?

76 :デフォルトの名無しさん:2005/10/27(木) 00:38:04
全テーブルでユニークにする意味があれば

77 :デフォルトの名無しさん:2005/10/29(土) 23:57:07
今でも文字列のサイズって2進数が推奨?

78 :デフォルトの名無しさん:2005/10/30(日) 13:48:04
>>77
日本語がおかしいが、いわんとするところは
キリのいい数字という意味だな。
256とか65536とかは魔法の数字だから
実態がどうであれ、推奨。

79 :デフォルトの名無しさん:2005/11/04(金) 23:41:37
PostgreSQL始めたんですがどこから手をつけたもんやら困っています
なにかいい書籍ないですか?
まだPQsetdbLoginで接続してSQL投げて遊んでる段階です

80 :デフォルトの名無しさん:2005/11/05(土) 07:22:19
目的がなければ何もしないでOK

81 :デフォルトの名無しさん:2005/11/06(日) 02:10:18
普通のPGと、SQLも含めたDB屋って違うからな。
SQLをDB毎に最適化できるPGがそもそもあんまりいない。
DBできますってPGに作らせると、毎回DBから結果拾ってくるようなの書くし。

Web+DBだと更にWebデザも絡んでぐだぐだになるかPGが必死こいてHTML修正しまくるかに成る。
なんかいいの無いの?

82 :デフォルトの名無しさん:2005/11/06(日) 02:15:27
でもPostgresのソース見た感じ、RDBって中身はキャッシュ制御の塊じゃないの?

83 :デフォルトの名無しさん:2005/11/06(日) 02:58:23
勉強中の奴にいっとくが

主キーの定義は一つのカラムに。
内容はユニークなだけで意味の無いものにしておけよ。

参考書に書いてても伝票番号、明細番号とかの複合キーにしないように。

84 :デフォルトの名無しさん:2005/11/06(日) 08:12:04
教える側気取るなら理由も書けよ。

85 :デフォルトの名無しさん:2005/11/06(日) 11:13:57
>>81

DB屋が最適化した SQL投げる関数作って PG に渡す。
もちろん要相談。

86 :デフォルトの名無しさん:2005/11/06(日) 11:23:25
勉強中の奴にいっとくが

主キーの定義は一つのカラムに。
内容はユニークなだけで意味の無いものにしておけよ。

参考書に書いてても伝票番号、明細番号とかの複合キーにしないように。

87 :デフォルトの名無しさん:2005/11/06(日) 11:39:28
>>86
素人キター

88 :仕様書無しさん:2005/11/06(日) 11:48:13
SQLなんて、DBを詳しく知らなくても素人が扱えるようにした簡易言語に過ぎない
だろ。それに、きょうびサーバーならGB超のメモリを搭載しているんだし、たかだか
数十万件くらいのデータベースなんて、オンメモリでやれよな。

89 :デフォルトの名無しさん:2005/11/06(日) 12:09:14
で、サーバー落ちたらすっぱりデータはあきらめる。

そういう人生もいいかもな。(w

90 :デフォルトの名無しさん:2005/11/06(日) 12:09:40
>>88
またまた素人キター

91 :デフォルトの名無しさん:2005/11/06(日) 12:21:27
>>88
>SQLなんて、DBを詳しく知らなくても素人が扱えるようにした簡易言語に過ぎない
素晴らしいな。

92 :デフォルトの名無しさん:2005/11/06(日) 12:38:06
DBのオペレーティング画面は違えど、標準SQLは、DBによらないし、選択、抽出、作成、挿入の操作をCUIでやってるだけだし、
具体的に言うと、ACCESSのGUIでコピー、フィルタ、入力、ペーストやってるのと変わらない。


93 :デフォルトの名無しさん:2005/11/06(日) 12:48:43
>>92
ああ、そうだな。
いい子だからもう寝なさい

94 :デフォルトの名無しさん:2005/11/06(日) 12:51:16
全角英字キモい

95 :仕様書無しさん:2005/11/06(日) 13:01:50
SQL文 ≒ VBスクリプトの一部機能

96 :デフォルトの名無しさん:2005/11/06(日) 13:06:09
ちなみに
88=92=95
なわけだが。
キティちゃんに認定してあげます。

97 :仕様書無しさん:2005/11/06(日) 14:38:15
96 = データベースがないと、データ処理ができないと本気で思っている
プログラマ以下の半人前SE(自称コン猿)

98 :デフォルトの名無しさん:2005/11/06(日) 14:39:49
名前いじってる時点でお察しください

99 :デフォルトの名無しさん:2005/11/06(日) 16:12:41
>>95
今MSはそういうことを考えているらしいぞ

100 :デフォルトの名無しさん:2005/11/06(日) 16:52:46
VBはもともとオラクルを扱うために生まれた言語ですよ

101 :デフォルトの名無しさん:2005/11/06(日) 17:16:21
   ∧_∧    / ̄ ̄ ̄ ̄ ̄
    (ω・ )ゝ < なんだって?
  ノ/  /     \_____
  ノ ̄ゝ


102 :デフォルトの名無しさん:2005/11/06(日) 20:20:07
DBの最適化命令って普通はどう突っ込む?
新しいデータが入ったと同時に実行されるようにするの?
時間で?

103 :デフォルトの名無しさん:2005/11/06(日) 20:26:36
>>97
個人でアプリ作ってるおばかさんにはDBなんて不要でしょうね。
ヒッキーは楽でいいですね

104 :デフォルトの名無しさん:2005/11/06(日) 20:55:30
>>100
えっ???

105 :デフォルトの名無しさん:2005/11/06(日) 21:55:05
>>91
まあ、>>92, >>95 はともかく。
>>88 の「SQLなんて、DBを詳しく知らなくても素人が扱えるようにした簡易言
語に過ぎない」は、「素人が」と言うところに引っかかる奴はいるだろうがま
あおおはずれと言うわけでもないだろ。

ビジネスロジックをバリバリ書くプログラマが全員データベース実装のプロと
言うわけじゃないから、データベース実装と言う分野ではある意味「素人」な
んだからさ。

106 :デフォルトの名無しさん:2005/11/06(日) 22:06:40
プログラマとデータベース設計(実装じゃないぞ)者を同一視してはいけないよ

107 :デフォルトの名無しさん:2005/11/07(月) 00:18:54
データベース実装は素人でもいいです
でもトランザクションについてはしっかり身につけてほしいですね
あ、トランザクションの使い方、じゃないですよ・・・

108 :デフォルトの名無しさん:2005/11/07(月) 14:59:22
>86
それだけではないでしょ。
ユニークていうのが、あいまいで使いたくなくて、唯一つのものにするけど、
唯一つのものが、主キーだけである場合、インデックスに使えるのは主キーだけになってくるから、
その場合、中間部分に意味のあるものはだめ。
例えば、年月日時で各桁に意味を持たせた場合、月ごととか中間一致は検索できない。
この場合、分類コード項目を新たに作る必要がある。
これを意味のない連番と表現されているようだけど、これもあいまいだと思う。

109 :デフォルトの名無しさん:2005/11/07(月) 15:21:33
>最小分類インデックスに使えるのは
 ~~~~

110 :デフォルトの名無しさん:2005/11/08(火) 02:24:22
年月入れる列って、日付型で1日固定として定義していい?
普通どうやる?

111 :デフォルトの名無しさん:2005/11/08(火) 07:20:40
俺は一日固定。でもどうせ年月しか使わないんだから日にちはどうでも良いんだよな。

112 :デフォルトの名無しさん:2005/11/08(火) 20:37:10
標準でXML並に日時型欲しい

113 :デフォルトの名無しさん:2005/11/08(火) 21:01:03
>>112
アクセスならあるけど?

114 :デフォルトの名無しさん:2005/11/08(火) 21:17:03
日時型ってyyyy/mm/dd hh:mm:ss?

115 :デフォルトの名無しさん:2005/11/08(火) 22:01:41
gYear, gMonth, gDay
gYearMonth, gMonthDay

116 :デフォルトの名無しさん:2005/11/09(水) 20:13:12
durationってのもあるな
イラネつったらいらんけど統一されるとありがたい
他人が使わなかったらあんまり意味無いけど

117 :>>105:2005/11/10(木) 22:25:27
>>106
書き方まずかったけど、>>105 のデータベース実装は、
データベースシステム自体の実装の話ね。例えばオラク
ルで働いてるアーキテクトとかプログラマーとかのこと
を言っている。データベースを使う人の話じゃないよ。

118 :デフォルトの名無しさん:2005/11/18(金) 22:26:57
O/Rマッピングを勉強中の者です。
DataMapperに関しての質問なのですが、
安直な実装では、DataMapperは識別子を受け取りドメインオブジェクトを作って返すことになるかと思います。
ここで、仮にオブジェクトの全ての値を利用するわけではなく、(状況によって変化する)
かつ、パフォーマンスを考慮して最低限のロードにとどめたい場合、
DataMapperにそのような特殊なオブジェクト(部分的にしかロードされていないオブジェクト)を返す責務を割り当てるべきなのでしょうか?

ドメインロジックに依存しない、という観点から見ると、DataMapperにそのような関数を作るのは不適当な気がしますし、
オブジェクトはデータベースに依存していないので、必要に応じて適宜読み込むようなProxyの実装も不適当かと思います。
(まだ理解が浅いので全く見当違いのことを書いているかもしれません・・・)

このような場合の解決策はどういったものになるのでしょうか。

119 :デフォルトの名無しさん:2006/05/13(土) 05:04:51
スレの内容よく分からんが
とりあえずageとくわ

120 :デフォルトの名無しさん:2006/07/08(土) 16:29:01
ORマッピングが面倒だね。
GUIなんて弄りたくないのだが、楽にやる方法無いの?
XMLなんてみんな使いやすいと思って弄ってるの?

121 :デフォルトの名無しさん:2006/07/23(日) 03:47:07
なんででーたべーす板って過疎ってるん?
こっちに統合しちゃえよ。

122 :デフォルトの名無しさん:2006/07/23(日) 12:52:03
一応、PL/SQLもプログラミング言語みたいだから、
こっちでもいいんじゃない?

123 :デフォルトの名無しさん:2006/07/24(月) 01:36:28
よくわからんがJavaならJDBC4.0で解決じゃね?

124 :デフォルトの名無しさん:2006/07/24(月) 10:37:42
JDBCの上にまともなフレームワーク使わないと大変ですよ。

125 :デフォルトの名無しさん:2006/09/14(木) 18:38:32
C++からMySQL操作しているのですが、データベースの作成法を覚えていざデータベースを作ろうとすると、どう設計すればいいのかわかりませんでした。
下のような表をデータベースにしようとしてるのですが、
http://www1.mbrace.or.jp/od2/B/200609/b060914.lzh
この表のデータをどういう風にテーブルに分割すればいいのか検討がつきません。
例を示していただけるとうれしいです。

126 :デフォルトの名無しさん:2006/09/14(木) 20:26:04
正規化って難しいですね
パズルのようで、プログラムとはちがった楽しさです


127 :デフォルトの名無しさん:2006/09/15(金) 11:16:05
正規化ってやりすぎてもパフォーマンスに悪影響出るんだろ?

128 :デフォルトの名無しさん:2006/09/15(金) 16:36:19
セックルをやりすぎても彼女に嫌われるのと同じ。
程々にしとくのが一番いい。

129 :デフォルトの名無しさん:2006/09/16(土) 00:52:36
なんかフィールドが50個ぐらいになっちゃったんだけど、50個は普通?

130 :デフォルトの名無しさん:2006/09/17(日) 01:05:10
テーブル名とかフィールト名って大文字?
小文字じゃだめかな。

131 :デフォルトの名無しさん:2006/09/17(日) 01:10:40
>>130
小文字じゃダメなデータベースソフトじゃなければ、どっちでもいいだろ

132 :デフォルトの名無しさん:2006/09/17(日) 01:52:02
そか、仕事ではオール大文字だったから
ありがとう

133 :デフォルトの名無しさん:2006/10/09(月) 14:56:22
SQLとはちょっと違うのだが一つ質問。
プロセス間通信のかわりにデータベースをメッセージパッシングのためのキューとして使うのってなんか問題あるのかな?
アプリ同士のメッセージ交換にActiveMQとかCORBAを使わずに簡単にできる方法としていいのかなと思うのだが。
そもそもデータベースってシステム内のスコープがものすごく広いグローバル変数だよな?


134 :デフォルトの名無しさん:2006/10/09(月) 16:07:49
>>133
まあ、問題ないと思うよ。
通常のDBのトランザクション系データ自体そうじゃない。
ある事象を記録して、次の事象を促すデータ。


135 :デフォルトの名無しさん:2006/10/11(水) 20:24:50
>>133
メッセージングとデータ格納は別だと思うよ。
メッセージングをdbってのはあり得ないでしょ。

136 :デフォルトの名無しさん:2006/10/18(水) 01:09:27
>>135
狭い範囲ではありえないかもしれないが、イベントの契機となるものを広義な意味でメッセージと解釈すればありうるでしょ。
たとえば、ネットワークゲームである地点の状況をDBに格納して、その値をプレーヤが処理がすればそれは一種のメッセージングだよね。

137 :デフォルトの名無しさん:2006/10/18(水) 05:51:03
株価みたいなリアルタイムの値の処理もDBに突っ込んで証券各社でメッセージングしてるくらいだしなあ。

138 :デフォルトの名無しさん:2006/10/21(土) 09:44:16
つ電文


139 :デフォルトの名無しさん:2006/10/21(土) 09:51:42
DBに格納されたことを伝える方法ってないよねえ
トリガってどこまでできるんだろう

140 :デフォルトの名無しさん:2006/10/23(月) 23:09:37
MSDEつかいはじめたんですが、現在作成しているテーブルがどれだけあるか、また
どんなものがあったかを調べるコマンドはあるのでしょうか?

141 :デフォルトの名無しさん:2006/11/25(土) 13:51:27
すいません、ちょっと質問させてください。
ODBC経由でAccessのデータベースに、データを連続で自動登録させていたんですが、
2万数千件を超えた辺りから急激にパフォーマンスが落ちました。その後も徐々に
パフォーマンスが落ちて10万件登録するのにメチャメチャ時間が掛かります。
そこで聞きたいのですが、フツーにAccessってこのくらい件数が増えたら当り前に
パフォーマンスが落ちるものなんでしょうか?
件数が多い場合は他のデータベースを使うほうが賢いのでしょうか?

142 :デフォルトの名無しさん:2006/11/25(土) 15:20:51
SQLite とか MySQL で試してみたら?
DB が悪いのかクエリーとの相性が悪いのか切り分けられるから。

143 :デフォルトの名無しさん:2006/11/25(土) 15:32:03
分かりました。試してみます。
ところでクエリーとの相性ってなんでしょう?

144 :デフォルトの名無しさん:2006/11/25(土) 15:39:09
大量のデータを一括登録する時は、それ用のクエリーの書き方ってあるものじゃん。

145 :デフォルトの名無しさん:2006/11/25(土) 15:43:20
い、一件ずつ登録していました・・・。
それようのクエリー、、調べてみます。

146 :デフォルトの名無しさん:2006/11/25(土) 15:57:46
とりあえずMySQLで試してみたら、Accessのようなパフォーマンス低下はありませんでした。
データも10万件が一分かからずに登録完了です。
しかし、それようのクエリーがあるのなら無駄な処理をしているわけで、、。
解決した問題はそれとして、調べて一から作り直してみます。
教えてくれた人、ありがとう。

147 :デフォルトの名無しさん:2006/11/25(土) 16:31:41
>>146
autocomit?

148 :デフォルトの名無しさん:2006/11/25(土) 16:57:46
>>147
はい、テストのつもりで自動コミットモードでプログラムしていました。
もしかして自動コミットとAccessに何か悪い関係でも、、?
どういう意味でしょう??

149 :デフォルトの名無しさん:2006/11/25(土) 17:16:24
大量のデータを一括登録するときはautocommitをOFFにしましょう。
ONだと10万回のcommitが発生します。

データの登録が完了=>一回commitで

150 :デフォルトの名無しさん:2006/11/25(土) 17:20:26
autocomitて表全体をLockするんじゃなかったっけ。
その場合、複数クライアントがいると・・・、あるいは、インデックス更新は時間が掛かる処理だから、
CREATE INDEXは後々バッチにまわすとか。
テーブルに導出項目(年齢を日付から計算させたり)があったりJOINが多かったりしても、パフォーマンスは悪化するけど、表全体ロックだと余計に。

151 :デフォルトの名無しさん:2006/11/25(土) 17:57:03
一般的なRDBMSの話だと、先にステートメントを作って使い回すとかね。

152 :デフォルトの名無しさん:2006/11/25(土) 20:32:53
亀レスですいませんでした。急に用事ができて出かけていたのでご容赦を。
>>149-150
言わるまで考えていませんでした。
でも、コミットって一回一回の処理ごとじゃなくてもできるんですね?知りませんでした。
10万件ものデータを一回でコミットできるんなら楽で良いですね。
それにロックがパフォーマンスを悪化させるのも初めて知って勉強になりました。
ありがとうございます!

153 :デフォルトの名無しさん:2006/11/26(日) 00:38:33
確かSQLiteもトランザクション開かずに操作すると
毎回コミットするんだよな確か

154 :デフォルトの名無しさん:2006/11/26(日) 16:10:36
Cでデータベースを弄るのに便利なライブラリとかミドルウェアって無いの?

155 :デフォルトの名無しさん:2006/11/27(月) 04:47:04
>154
http://www.google.co.jp/search?hl=ja&q=C%E8%A8%80%E8%AA%9E+%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja

156 :デフォルトの名無しさん:2006/12/10(日) 01:44:22

こういうことってセキュリティ対策なので仕方ないのはわかるんですが、
修正に1500〜3000万もかかるもんなんでしょうか?
ttp://www.sankei.co.jp/shakai/wadai/061209/wdi061209004.htm

住基ネット離脱に難題…1人削除すると「不正データ」に

 住民基本台帳ネットワーク(住基ネット)からの個人の離脱を認めた大阪高裁
判決受け入れを決めた大阪府箕面市で、原告1人の住民票コードを削除すると、
約12万7000人のデータが入ったサーバーがダウンする恐れのあることが9日、分かった。

 対応策には1500万−3000万円かかるといい、担当課は頭を抱えている。
市情報政策課によると、住基ネットは市から府のサーバーを経由して国にデータが
送られる。しかし、原告の女性を除いたデータの交信は国から不正アクセスと
みなされ、市のサーバーがダウンする可能性があることが判明。削除できた場合でも、
原告を除く全市民のシステムを再構築するか、原告のデータだけ文書で管理する以外に道はないという。

 高裁判決は大阪府の吹田、箕面、守口3市の計4人の離脱を認めたが、吹田、
守口市は上告を決定。箕面市の藤沢純一市長は7日、判決受け入れを表明したうえで、
具体的な削除の方法について「システムの専門家ではなく、よくわからない」としていた。

(2006/12/09 21:56)


157 :デフォルトの名無しさん:2006/12/10(日) 01:51:25
age忘れてました
DB版は過疎ってるのでこちらで質問させて頂きました
すみません


158 :デフォルトの名無しさん:2006/12/10(日) 02:31:23
>>155

>>こういうことってセキュリティ対策なので仕方ないのはわかるんですが
いやいやいや・・・・・

まず普通にありえねぇだろwwwww
論理削除オンリーでデータが無限に増え続けていくシステムだぜ?

159 :デフォルトの名無しさん:2006/12/10(日) 07:27:22
>>156-157
DB板に逝け

160 :デフォルトの名無しさん:2006/12/10(日) 10:59:00
PG板のスキルは低いよ(w

161 :デフォルトの名無しさん:2006/12/10(日) 11:05:43
ニュー速+のスレ見たがレベル低い話しか出てなくて驚いた
(sql一発でできるだろ、に近いノリ)

全うな話はだれかがブログに書くんじゃね?

162 :デフォルトの名無しさん:2006/12/11(月) 16:53:26
IBMの社員が電球を取り替えるのにかかる人数は・・・
とかいうのに近い>1500万〜3000万

163 :デフォルトの名無しさん:2006/12/23(土) 01:44:57
結局、Cで汎用的に使えるライブラリって無いの?

164 :デフォルトの名無しさん:2006/12/23(土) 05:26:59
http://www.codeproject.com/database/DBDevVCOLEDB.asp

165 :デフォルトの名無しさん:2007/01/24(水) 14:31:35
たとえば、家にある楽曲を管理して、検索するプログラムつくりたいんだが、JAVAがいいのか?
なんかさ、環境ダウンロードするのがめんどくて。

166 :デフォルトの名無しさん:2007/01/24(水) 18:00:35
Javaも環境ダウンロード必要

167 :デフォルトの名無しさん:2007/01/24(水) 20:42:57
Accessでいいんじゃね?

168 :デフォルトの名無しさん:2007/01/25(木) 07:22:34
Accessのファイルを読み込み、そこからテーブルを選択して
グリッドに表示するプログラムを作っています。
とりあえず、動くものができたのですが1つだけテーブルを選択する
時にエラーになる現象を見つけました。
テーブル名の中に半角カッコ「()」が使われているテーブルで読み込みエラー
になってしまいます。(全角カッコにすると問題なく読めます)
「テーブル名には半角カッコは使わないでくださいね」と言ってしまえばそれでいいような
きもするのですが・・なんか悔しくて^^;

これを回避するにはどうしたらよいでしょうか?
環境はボーランドC++Builder7とWinXpです

169 :デフォルトの名無しさん:2007/01/27(土) 15:46:21
SQLの「バックアップファイル」と「チェックポイントファイル」の違いとは何でしょうか?

170 :デフォルトの名無しさん:2007/01/27(土) 17:22:55
sql文をこねくりまわしてやっと実現した機能が
簡単なsql文とスクリプトで見易く速く出来たり
ってよくあると思うけど、お前らどう?

ケースバイケースだけど、なんとなく負けた気がするよな
誰に負けたか知らんけど

171 :デフォルトの名無しさん:2007/01/29(月) 20:33:24
sqlも勉強すれば良いだけだろ。

perlでやっとで出来た処理が、rubyだとさくっと出来たりするのはよくある話。


家にある楽曲程度なら、phpかrubyで作るのが漏れの趣味。

172 :デフォルトの名無しさん:2007/01/30(火) 00:51:29
javaだとどのフレームワーク使うのが普通?
みんな無料のjbossでがんばってるの?
ウェブロジックとウェブスフィアのどちらがいい?

173 :デフォルトの名無しさん:2007/01/30(火) 09:30:49
MySQLにODBCドライバ入れて
CやRubyやExcel/Wordからはアクセス出来るのですが
なぜかAccessからはアクセス出来ません
なにがいけないのでしょうか?

174 :デフォルトの名無しさん:2007/01/30(火) 12:03:22
>>173
versionとかわからんけど、マニュアルは読んで試したの?
ttp://dev.mysql.com/doc/refman/4.1/ja/myodbc-clients.html

175 :デフォルトの名無しさん:2007/02/01(木) 21:09:34
>>172
仕事か趣味かしらんが、データベースがDB2ならWebSphereだろーなぁ。
別にDB2でJBOSSでもtomcatでもいいんだが。

176 :デフォルトの名無しさん:2007/04/11(水) 23:31:43
ツリー型の掲示板つくってるんですが、1レスを1レコードって考えた場合
レス間の繋がりってどうやって表現するのが良いんでしょうか。

177 :デフォルトの名無しさん:2007/04/12(木) 00:25:28
にレスの親子関係を別テーブル化。
create table (new_res, parent_res, タイムスタンプ)


178 :デフォルトの名無しさん:2007/04/12(木) 01:02:43
えーと、それが一番素直で使い勝手が良いとか考えたんだけど、
クエリ何度も飛ばすのは変だなぁ、って思いまして。

179 :デフォルトの名無しさん:2007/04/12(木) 09:12:33
読込時の性能を上げるためにクエリ回数を減らしたいってことなら冗長なフォーマット済みデータを作る。
だけどそういった最適化は後で考えるようにして、まずは>>177の通り実装してみれば良いと思うよ。

180 :デフォルトの名無しさん:2007/04/24(火) 03:49:31
データベース弄るのに楽な言語って何?

181 :デフォルトの名無しさん:2007/04/24(火) 09:20:45
>>180
SQL


182 :デフォルトの名無しさん:2007/04/24(火) 10:22:08
じゃあSqLを発行するのに楽な言語は?

183 :デフォルトの名無しさん:2007/04/24(火) 11:25:45
PL/SQL

184 :デフォルトの名無しさん:2007/04/27(金) 17:54:31
自分流のデータフォーマット考えて、自分でそれをいじるモジュール作って、自分の作品でそれを使うのが一番快感。

185 :デフォルトの名無しさん:2007/06/21(木) 23:02:39
最近SQL Server(2005) の勉強始めたものです。
Localでの段階では成功していたのですが、いざネットワーク上の別パソコンへ
という段階で、躓いております。
C#のWinFormプログラムでConnectionStringで接続して簡単なSQLを実行しようとしています。
するとWindows認証でログインしようとしたときに、guestでログインしようとしているようです。
(サーバ側でguestを無効にすると guestはログインできませんでした。みたいなエラーが出ます。)
ConnectionString内にUser ID を設定しても変わりません。

ネットワークはワークグループベースなんですが、Windows認証ってドメインとか関係あるんでしょうか?
こういう場合はSQL Server認証なんかでやった方がいいんでしょうか?
どんな資料もWindows認証を推奨してるんでWindows認証でやろうと思っていたのですが。
もちろんサーバー側にユーザー登録はしております。(Windows、SQL Serverとも)


186 :デフォルトの名無しさん:2007/06/22(金) 05:28:49
LDAP

187 :185:2007/06/22(金) 23:00:11
自己レス

エクスプローラの表示オプションで「簡易ファイルの共有を使用する」のチェックを外す

でした。orz


188 :デフォルトの名無しさん:2007/06/23(土) 00:10:28
SQL CLR って VS2005 スタンダードではできないの?
それとも、テンプレートはないけどできるものなの?
できるとしたら、めんどくささのレベルはどれくらい?

189 :デフォルトの名無しさん:2007/07/02(月) 11:59:41
どなたかやさしく教えて下さい。
昨日データベースの勉強をはじめて、
データベースは、たくさんのテーブルを入れる箱だというところまで分かりました。
中に保管するテーブルは、アプリケーションが異なろうが、クライアントが違おうが、
とにかく放り込んで行ってOKなんでしょうけ?
レン鯖などだと、DB1個しか用意されてなかったりするので、
子供のオモチャ箱状態で運用して良いのか心配です。

190 :デフォルトの名無しさん:2007/07/02(月) 12:10:52
> とにかく放り込んで行ってOKなんでしょうけ?

その、放り込みする方法はアプリケーションやプログラムで違うんだが。

191 :デフォルトの名無しさん:2007/07/02(月) 12:51:49
>>189
当分は1個で事足りるだろうから心配ないよ

192 :デフォルトの名無しさん:2007/07/04(水) 13:00:36

例えば性別で男/女をオプションボタンで選択させるような
画面を作るとした場合、データベースとの連携って
皆さんどう設計していますか?


フォームに男/女とオプションボタンを配置すると、
データとプログラムがくっ付いているので気持ち悪く、
いつも良い方法が無いかなと思っています。

193 :デフォルトの名無しさん:2007/07/04(水) 19:29:14
マスタテーブルを用意して
リストボックスと連動させてるよ

194 :デフォルトの名無しさん:2007/07/04(水) 22:58:38
> フォームに男/女とオプションボタンを配置すると、
> データとプログラムがくっ付いているので気持ち悪く

「オプションボタン」「データとプログラムがくっ付いている」「気持ち悪く」
と、どれも他人には何の事やら分からないことばっかりじゃないか。
具体的に言ってくれ。

195 :デフォルトの名無しさん:2007/07/05(木) 08:41:12
>>192
社会保険庁のようにデータベースの性別の誤りを
訂正させたい場合以外は、男女のオプションボタンと
データベースの連携なんて存在しないと思うのだが。

196 :デフォルトの名無しさん:2007/07/05(木) 14:39:39
分かりづらくて申し訳ないです。

オプションボタンは、ラジオコントロールの事です。

――――――――
| ○男 ●女 | ← グループの中から一つだけ選ぶ事が出来る
――――――――

通常ラジオコントロールで、得られる値は数値になります。
上記例の場合、0=男、1=女 とかになります。

ただ、このままでは 0=男 はデータベース側ではなくて、
フォーム側の設定になり、それに合わせてDBも0、1 or 男、女 と
保存する事になります。
これでは、フォームとDBが密接に関係していると思い、どうなのかな?
っと悩んでいます。

フォーム表示時に、ラジオコントロールを作成/追加させたりする方が
一般的なんでしょうか。

コンボボックス等であれば、データは切り離されていますので、
殆どの場合、考慮しなくて良いんですが…。

197 :デフォルトの名無しさん:2007/07/05(木) 14:53:25
>>196
話のポイントはわかりました。私が疎いのかどうも環境がわからない。
Formの値が直接質問や挿入に使われるようですが、
データベース「プログラミング」はどこに居場所があるのですか?


198 :デフォルトの名無しさん:2007/07/05(木) 15:57:20
>>196
データベース内のデータと、人が見るGUI上の表示を変えることはよくあると思うが。
具体的に何のアプリ使ってるの? MS Access とか?
データベース本体と、それを操作するGUIプログラムは別になってる方が一般的な気がする。

199 :デフォルトの名無しさん:2007/07/05(木) 17:29:31
>>197
プログラミングの居場所?
すみません。ちょっと分かりません。

例えば、ラジオコントロール と 登録ボタンだけの簡単なアプリがあったとして、
登録ボタンを選択時に、DBへ登録するなどです。

ラジオコントロールで 1=女 が選択されていれば、1がDBへ入ります。
ただ、この1は、フォームとDBで決まりごととして、対応する事になります。
例えば、女のIDを1→501 へ 値を変えた場合、フォームも変更しなければいけません。
通常、このような作りは良くないと思います。

>>198
環境は、SQL Server と VB.NET(2005) になります。

200 :デフォルトの名無しさん:2007/07/05(木) 18:44:52
あ〜

201 :デフォルトの名無しさん:2007/07/05(木) 19:27:17
>>199
フォームが"1"の時はフィールド 性別 の値は"女"と変換するのが
プログラムの役割だと思うのですが。
これだとフォームが変更されるとプログラムを変更しなくては
ならなくなりますが、それがいけませんか?

202 :デフォルトの名無しさん:2007/07/05(木) 20:09:22
>>201
うーん。
「データとプログラムは分けるべき」って言うのが根底にあるんですが、
どうなんでしょうか。

この場合、DB側でもフォーム側でも、0=男、1=女 という情報を持っているわけですよね?

どちらか片方(フォーム/DB)を修正したら、もう一方も修正が必要というのは、
設計がおかしいような気がしてならないのです。

それともそういうものなんでしょうか。

203 :デフォルトの名無しさん:2007/07/05(木) 20:25:06
プログラムには、

if(seibetsu=="0") then function_otoko();
else if (seibetsu=="1") then function_onna();

のようなことがどこかに書かれているのでしょう?
フォームとDBの修正どころか、プログラムも変更が必要に
なると思います。

204 :203:2007/07/05(木) 21:04:36
どうしても「データとプログラムはそれぞれ独立」にするべきだとすると

1 フォームのボタンの名,
2 そこで返される値,
3 データベースに格納されるときの値
の少なくともこの3項目をフィールドとして持つテープルを作っておいて、
まずこのテーブルを読み込み、変換してデータベースを処理するように
プログラミングする。あるいはプログラムは何もせずJOINで処理する。
が、考えられるのではないか。
>>193 がこれに当たるのかどうか、よくわからない。

205 :デフォルトの名無しさん:2007/07/05(木) 21:11:18
入力で返される値をそのままDBに保存するのはセキュリティホールの元

206 :デフォルトの名無しさん:2007/07/10(火) 01:24:42
ちゃんとチェックしないとねえ。

207 :デフォルトの名無しさん:2007/08/02(木) 23:21:17
誰か>>188プリーズ

208 :デフォルトの名無しさん:2007/09/05(水) 21:09:46
こんにちは、ど素人プログラマです。

SQLサーバー2000について教えて欲しいのですが、

あるテーブルに項目1、項目2、項目3が定義されているとして、
 項目1の値が「1」のときは、項目2は必須項目
 項目2の値が「1」以外のときは、項目3は必須項目
というような事を外部キー制約のように実現するにはどうすればいいのでしょうか?

制約? トリガ?

209 :デフォルトの名無しさん:2007/09/16(日) 15:37:43
DFD図を清書して資料として残そうと思っているのですが、
これを書く何か良いソフトは無いでしょうか?
それともボールペン最強でしょうか?

210 :209:2007/09/16(日) 18:48:04
XEAD ってソフトがよさげなので、試してみることにしました。有難う御座いました。

211 :デフォルトの名無しさん:2007/10/06(土) 13:08:14
昨日からDBMSの勉強始めた者です。すみません。
DBが複数の表を入れる器だというところまで理解しました。

素朴な疑問ですが、同じWebサービスを提供するアプリなどで、
ユーザ数ぶん器を用意するのが普通なのでしょうか?
それとも、表を重複しない名前にして一つの器にブッこんでいけばよいのでしょうか?

212 :デフォルトの名無しさん:2007/10/06(土) 14:18:31
どこまでわかっているかしらんけど
とりあえずいえるのはユーザー数に比例して増えるのはテーブルの行数
負荷が大きいと複数の物理的なデータベースサーバーを増やすがそれはまた別の話

213 :デフォルトの名無しさん:2007/10/06(土) 18:15:55
>>212
なるほどありがとうございます。
1ユーザが、それぞれ顧客情報のテーブルや商品情報テーブルなどを持って
ショップシステムを運営するような場面です。
1DB内に、顧客情報テーブルA、顧客情報テーブルB、商品情報テーブルA・・・と入れていき、
ABで区別して使おうかと考えました。

214 :デフォルトの名無しさん:2007/10/06(土) 21:55:25
>>213
それならユーザーごとに別DBにするのが一般的だな。

215 :デフォルトの名無しさん:2007/10/07(日) 04:43:45
>>213
レン鯖とかでcreatedb無理なら1個で、できるならユーザ別に、でいいんじゃね?

216 :デフォルトの名無しさん:2007/10/08(月) 11:11:03
自分だけのデータベースならともかく、顧客情報とかも扱うデータベースつくろうって人が
そういう知識じゃ危なすぎだろう。

217 :デフォルトの名無しさん:2007/10/08(月) 14:23:28
テーブルは単なる例です。
説明しやすいかと思いまして。

218 :デフォルトの名無しさん:2007/10/09(火) 02:02:19
うむ。どっちがいいだろうか...

219 :デフォルトの名無しさん:2007/10/21(日) 13:52:32
ユーザーテーブルに
・ユーザー情報全般を更新
・電話番号のみ更新
の2つの更新がある場合に、
@ 2種類のUPDATEを発行する処理を別々に作る
A UPDATEを発行する処理は1箇所で、
1回SELECTしてとってきたデータに、更新したい情報のみセットして同じUPDATE処理を実行する
(更新しないデータもSQL上だと set xxx = val, みたいになります)
1と2どちらがいいのでしょうか。

220 :デフォルトの名無しさん:2007/10/22(月) 00:39:42
>>219


221 :219:2007/10/22(月) 23:28:49
>>220
ありがとうございます。そうなった場合に同一テーブルに対するUPDATEが複数できてしまうのですが、こういうものなのでしょうか。

222 :デフォルトの名無しさん:2007/10/23(火) 11:14:04
「UPDATEが複数できてしまう」とは、どこに出来ると考えてるの?

223 :219:2007/10/23(火) 21:39:32
>>222
Daoに2種類のメソッドができてしまうといったほうがいいでしょうか。。。


224 :デフォルトの名無しさん:2007/10/23(火) 22:03:35
>>223
電話番号のみ更新用メソッドと、ユーザー情報全部更新用メソッドが出来るって事でしょ?
ユーザー情報の更新に時間掛かるんだったら分けた方が良いし、
そうでなければ全部更新だけで良いような気がする。

225 :デフォルトの名無しさん:2007/10/24(水) 22:48:39
どちらも主キーを条件に更新をするので更新件数は1件です。
1. updateAllで発行されるSQLは update userTbl set name = * , addr = * , tel = *, kubun = * where...
2. updateOnlyTelで発行されるSQLは update userTbl set tel = * where ...
全部更新だけを採用した場合、画面から受け取るのは主キーと電話番号だけなので、1は実行できないじゃないですか。
なので、1の全部更新を実行するために、主キーでデータを取得したDTOに画面からきた電話番号だけをセットして1を実行する、という流れになるのかなぁと。

さらに、kubunだけを更新するような機能が追加された場合に、
update userTbl set kubun = * where ...
を作るのか、これだとupdate文ばかり種類が増えるのが気持ち悪いような気がして・・・

226 :デフォルトの名無しさん:2007/10/25(木) 10:29:12
画面表示や、画面からデータベースへ情報を受け渡すプログラムはどうしてるんだ?
ユーザー情報が全て画面に表示してあるなら、そこから全情報を渡すこともできるんじゃないの?
画面上で変更された項目だけについてSQLを動的に作成することもできるだろ。

227 :デフォルトの名無しさん:2007/10/25(木) 23:04:44
全情報更新は、ほとんどの入力項目がテキストボックスで編集画面にくると現在値がセットされいて、hiddenに主キーがあります。
電話番号のみ更新は、電話番号のみテキストボックスがあり編集画面にくると現在地がセットされていて、hiddenに主キーがあります。

動的にSQLを作るとは、例えばStringBufferとかでがんばるということですか?
update userTbl set ************* where id = ..
***の部分を値があったら StringBuffer#append("name = " + name) という感じで。

本当に頭悪くてごめんなさい。

228 :デフォルトの名無しさん:2007/11/07(水) 10:20:59
visual basic上で、SELECT文に変数を使用することは可能ですか?

229 :デフォルトの名無しさん:2007/11/07(水) 10:35:39
Ruby on railsなんて見ていると、DBプログラミングなんて必要なのかどうのなのか
と思うのだが。

230 :デフォルトの名無しさん:2007/11/07(水) 10:41:09
ああいうのが今後有望な方向の一つだとDB関係の御大が
ACM Queueのインタビューで言ってたな。

231 :デフォルトの名無しさん:2007/11/07(水) 17:27:34
MS-DOS時代の、CUIデータベースソフト(マイクロソフトアクセスの前身?)の名前がどうしても思い出せないんですが、おわかりになるかた、おしえてください。

よろしくお願いします。

232 :デフォルトの名無しさん:2007/11/07(水) 21:33:00
マルチプラン?

233 :デフォルトの名無しさん:2007/11/09(金) 00:06:53



234 :デフォルトの名無しさん:2007/12/20(木) 20:51:36
>>231
通称マルチファイル
マイクロソフトマルチツール - ファイル だったかな?
- プラン 通称マルチプランが 表計算
他にマルチチャートってのがあった。

dBASEII の事じゃないよね?

235 :デフォルトの名無しさん:2007/12/29(土) 16:31:20
トリガーアクションとして、「プログラムの起動」ができるDBシステムは
ありますか?

236 :デフォルトの名無しさん:2008/01/14(月) 17:05:21
Microsoft SQL Serverって商品名ですか?

分からないことがあってぐぐってるんですが、各々の単語って
一般名詞だと思いません?


どうしてマイクロソフトアアアアアアアアアアア!!!

237 :デフォルトの名無しさん:2008/01/14(月) 18:35:50
>>236
Microsoftは一般名詞じゃないよ

238 :デフォルトの名無しさん:2008/01/14(月) 20:00:20
そうだね(´・ω・`)ショボーン

239 :デフォルトの名無しさん:2008/01/14(月) 20:55:55
Windowsとか
もうやめてくれよと

240 :デフォルトの名無しさん:2008/01/20(日) 19:37:58
なんでウインドウズを使いたがる奴がいるのか?

241 :デフォルトの名無しさん:2008/01/20(日) 20:27:23
一番便利だからだろうな

242 :デフォルトの名無しさん:2008/01/21(月) 20:17:06
なんでウインドウズは車輪の再発明ばかりやるのか?

243 :デフォルトの名無しさん:2008/01/21(月) 20:18:39

http://itpro.nikkeibp.co.jp/article/COLUMN/20080104/290425/

244 :デフォルトの名無しさん:2008/01/22(火) 00:15:28
>>242
*nixの連中は再発名ばっかやってるよなw

245 :デフォルトの名無しさん:2008/01/22(火) 00:17:56
再発名?

246 :デフォルトの名無しさん:2008/01/22(火) 05:48:19
再発名はあるいみ至言かもしれん。
同じ概念なのに名前だけが違うって意味だろ?
マイクロソフトがお得意の。

247 :デフォルトの名無しさん:2008/01/22(火) 06:24:15
かといって最近の*nixにオリジナルな新概念があれば
知りたいもんだが…
パクリ元が尽きたせいでMicrosoft Researchがあの
規模になってんだyo!

248 :デフォルトの名無しさん:2008/01/22(火) 22:03:33
>>247
過去の蓄積をパクり終えた後はそりゃ当然だろ。
ある時代に研究開発しているものはどれも同じような問題意識が背景となるわけで。

249 :デフォルトの名無しさん:2008/01/22(火) 22:46:29
パックってもいいが、意味無く文法かえたり名前変えたりして欲しくない
ディレクトリのデリミタも素直にスラッシュにしておくべきだった

250 :デフォルトの名無しさん:2008/01/25(金) 05:45:11
マイクロソフトは自社のパクリ製品をスタンダードにしたがるからなあ。互換性で問題でまくり。

マカ方面も一般名詞のプロダクト多いし、頭にi付けたのばっか。
ワードじゃなくてページとか、パワーポイントじゃなくてキーノートとか。

またDARRPAがお金出して、戦争用のネットワーク構築に伴うOS開発ってやらないのか?
OSの進化が止まってる。ネット機能以上の盛り上がりがないよな。仮想化もいまいちだし。

251 :デフォルトの名無しさん:2008/01/29(火) 14:07:09
WEBデータベースプログラミングの卒論書くにもあまりサイトしらないので、書くのにオススメのWEBサイト教えてください

252 :斎藤亜紀:2008/01/29(火) 14:10:36
GetMoney!では、名前に恥じないよう、皆様にキャッシュバックしやすい仕組みを
 提供しております。
 ぜひ、この機会に、GetMoney!に無料会員登録してみてください!

 http://dietnavi.com/?id=676366


253 :デフォルトの名無しさん:2008/03/04(火) 00:35:30
お前ら、データベースをマンセーしてるのか?

254 :デフォルトの名無しさん:2008/03/04(火) 14:44:45
肉のマンセー

255 :デフォルトの名無しさん:2008/03/05(水) 01:24:51
MySQLにExcel (Office XP)からODBC接続すると、データが文字化けしてしまう。
DBにはUTF8で登録していて、クライアントはWinXP環境。
Connector/NET 接続だと問題無いんだけどね。

character-set系(skip-character-set-client-handshakeも)やら
MyODBCで、set names utf8 などの設定をしてみたんだが駄目。
どうしても(日本語に)化けてしまう。
ちなみに、登録してあるのは日本語では無い(ISO-8859の11辺りだったかな?)

なんだろ。。

256 :255:2008/03/05(水) 08:29:57
補足。
データは、元がISO-8859-11?をUTF-8に変換してDBに登録していて。
それをExcel(MSAccessでも同じ)に読み込んでみると、
ISO-8859-11?の0x80以上にあたる文字が日本語に化けて表示されてしまいます。

ちなみに、そのデータを直接MSAccessに登録して、ODBCでExcelから読んでみると
正しく表示されたんで。少なくとも、MyODBCかMySQLの設定の問題だと思うんだけど。

257 :デフォルトの名無しさん:2008/03/06(木) 18:58:48
MySQLのODBCコネクタには問題が多い
バージョンによってもかなり挙動が違う

258 :255:2008/03/07(金) 01:30:11
ありがとう。そうなんだ。
しょうがない、Accessでやっとくか。

259 :デフォルトの名無しさん:2008/03/07(金) 07:58:09
======== my.ini
[client]
default-character-set=sjis
skip-character-set-client-handshake

[mysql]
default-character-set=sjis

[mysqld]
default-character-set=sjis
skip-character-set-client-handshake

これをサーバー側かクライアント側のどっちかに置くと
正しく認識/余計な変換されなくなるとか何とか書いてあるサイトをみたことがある
(サイトは忘れたしどのディレクトリに置くのかも忘れたので調べてくれ)


260 :255:2008/03/08(土) 00:44:02
>>259
なるほど。
mysqldの方には、skip-character-set-client-handshake を入れていたけど。
clientにも入れるのね。
試してみる、ありがとう。

261 :255:2008/03/11(火) 02:02:07
うーん。駄目でした。
扱う文字が非sjis系でPCが日本語OSというところで、ドライバが上手く
動かないんだろうね。あきらめ。

262 :デフォルトの名無しさん:2008/05/04(日) 00:16:52
とりあえず何かデータベース的なものを作ろうかと企んでるんですが
何かお勧めのものや準備しておくべきものとかってありますか?

263 :デフォルトの名無しさん:2008/05/04(日) 08:41:13
>>262
Accessを買う
Accessの本を買う

264 :デフォルトの名無しさん:2008/05/07(水) 13:03:55
>>262
Prolog


265 :デフォルトの名無しさん:2008/05/30(金) 19:25:22
紙と鉛筆

266 :デフォルトの名無しさん:2008/05/31(土) 06:27:57
データベース的なもの
データベース的なもの
データベース的なもの
データベース的なもの
ISAMの勉強でもしやがれ

267 :デフォルトの名無しさん:2008/09/12(金) 09:58:52
DBやる前にファイリング検定でもうけやがれ

268 :デフォルトの名無しさん:2008/10/14(火) 13:52:49
マイクロソフトのSQL Server2005の評価版をダウンロードしたんですが
インストーラのexeファイル(約955MB)にデジタル署名がされていないんです。
これってインストールしてもOK?
マイクロソフトがデジタル署名なしにリリースするってありえる??

269 :デフォルトの名無しさん:2008/10/16(木) 21:13:01
基礎薬学医学のデータを蓄積して、ノートみたいに編集したり、必要時に検索できるようにするために、ちょうどいいデータベースソフトウェアなどありませんか?
化学構造式や写真、グラフ、文書をうまく管理して、学習に役立てられたらとおもってます。
また、論文や日記など、文書も管理・編集できるとよいです。
どなたか教えてもらえませんか?

270 :デフォルトの名無しさん:2008/10/17(金) 13:00:00
>>269
有能な秘書

271 :デフォルトの名無しさん:2008/10/17(金) 17:10:59
まぁ確かに・・・

272 :デフォルトの名無しさん:2008/10/18(土) 14:26:37
>>269
データベースっていうより資料を管理する手法を知りたいんだね。
資料を管理する手法をアプリケーションという形で提供されていればベストだよね。
それはソフトウエア板の「こんなソフト知りませんか?」スレで聞いたほうが良いね。

自分はエクセルを使っている。
ドキュメントは自分でテキストエディタで書く。そしてそこに引用されている図のための画像やらその他ファイルを一緒のフォルダに入れる。
このフォルダをエクセルにハイパーリンクで挿入して見出しの一覧としている。
この見出しをクリックすればそのフォルダが開き、そこには必要なもの一式が入っているというわけ。
で、検索はWindowsの検索を使用している。テキストファイルならこれで引っ掛けることができるからね。

これらをもっと統合的にやるアプリは俺もほしいと思う今日この頃。




273 :デフォルトの名無しさん:2008/10/18(土) 17:31:58
データベース自作するののアルゴリズムとか載ってる本やHPない?
Oracleを超えてやる。

274 :デフォルトの名無しさん:2008/10/18(土) 17:34:41
CGIでAccessみたいなことができますか?

275 :デフォルトの名無しさん:2008/10/18(土) 17:44:27
ACCESSの具体的などんなことをしたいのか書かないとわからん。
基本的にデータベースソフトとWebサーバーソフトでは機能も違うから
似たようなことができるとはおもえんけど。。そのAccessみたいなことって
具体的になに?

276 :デフォルトの名無しさん:2008/10/18(土) 17:50:09
データベースの定義とかレポート作成とか。

277 :デフォルトの名無しさん:2008/10/18(土) 19:08:43
できんことはないよ。>>276
やってみやあ。データベースの定義はどんな定義したいのかしらないけど
普通にテーブル作成とかAccessでいうビューの作成とかデータインポート・表示とか
できるよ。レポートも作成できるよ。HTML表示になるけど。がんばりゃあ。

278 :デフォルトの名無しさん:2008/10/22(水) 18:37:54
PostgreSQLでC言語の埋め込みSQLってのがありますけど,
"text"(不定長の文字列)として宣言されたフィールドを取り出す時って
どのように宣言すればいいんでしょうか?

EXEC SQL BEGIN DECLARE SECTION;
text hoge;
EXEC SQL END DECLARE SECTION;

とかやってみたけど怒られました.
サンプルに書いてあったように
VARCHAR hoge;
でも怒られるし.
そもそも'text'は標準外だからサイズは固定するしかない?


279 :デフォルトの名無しさん:2008/10/28(火) 21:08:45
>>272
ありがとうございます。そのとおりです。windows office one note2007を使用することに決めました。ありがとうございます。

280 :デフォルトの名無しさん:2008/10/28(火) 21:42:35
>>274-275
CGI+ExtJSでなんとかなる


281 :デフォルトの名無しさん:2008/10/28(火) 21:44:54
http://pc11.2ch.net/test/read.cgi/db/1220581676/5
:NAME IS NULL:2008/09/07(日) 05:32:37 ID:???
これはどうよ。

窓の杜 - 【REVIEW】「SQLite」のデータベースをGUIで操作できる高機能管理ソフト「PupSQLite」
http://www.forest.impress.co.jp/article/2008/09/04/pupsqlite.html

282 :デフォルトの名無しさん:2008/10/30(木) 03:15:28
DB超初心者からの質問です。
employeeテーブルがあるとします。
列はid(PK)とnameからなるとします。
社員を追加削除を繰り返しているとidも欠番が出たりすると思います。
欠番は別に良いのですが、社員を追加するときにidに、現在テーブルにないidを探してinsertしないとダメですよね?
このidをどうやって作るのですか?

IDENTITYプロパティーをつければシステムによっては自動インクリメント値ということを本で読みました。
でもシステムによっては・・じゃ、だめっすよね。

あとシステムが自動でつけたidを得る必要がある場合、どうするんでしょう。

結局自分でユニークな値を作るの?


283 :デフォルトの名無しさん:2008/10/30(木) 03:44:55
>>282
> このidをどうやって作るのですか?
方法はいろいろとあると思います。
例)INSERT時の時刻、レコード件数、最大値

過去の最新のIDを格納するテーブルを作って、それを+1したものを新規ID
とするということを過去にやったことがあります。

この場合、同じ時刻の登録操作によってIDが重複する可能性があります。
当然INSERTは蹴られるわけですが、そのときはリトライすればよい。また
適正なロックをかけることにより、このINSERTの失敗をを避けることができます。

こういう面倒なことをしなくてもよいために、DBによってはユニークIDを生成する機能
を持っています。(現在のほとんどのDBは持っていると思います)

> あとシステムが自動でつけたidを得る必要がある場合、どうするんでしょう。
SELECTして見る。

284 :デフォルトの名無しさん:2008/10/30(木) 05:48:40
>>283
ご回答ありがとうございます。

DBが用意してくれているユニークなIDを使うのがよさ気ですね。

もしemployeeのidが他のテーブルから外部キーに指定されている場合、
employeeに挿入したときにDBがつけてくれるidを使って他のテーブルにも挿入とかしたい場合もあると思いますが、
このときはselectでなんとか、その挿入したレコードを引っ張ってくるんですね。
その場合、テーブルをロックしてダーティーリードを防ぐ必要があるということかなぁ。

初心者なのでアホな事を言っているかもしれませんが。

285 :デフォルトの名無しさん:2008/10/30(木) 06:14:33
>>284
INSERT INTOとSELECTサブクエリを使えばひとつのSQLステートメントで
idに値が入った行を作成することができます。

DBのユニークID生成機能にも欠点がありまして、データのExport/Importをするとき
少々厄介です。

286 :デフォルトの名無しさん:2008/10/30(木) 08:03:14
>>285
なるほど。。ちょっと感動してしまいました。
サブクエリか。

経験者のお言葉はありがたい。本当にありがとうございました。

287 :デフォルトの名無しさん:2008/10/30(木) 10:25:38
SELECTの条件はどうすればいいんだろう?

288 :デフォルトの名無しさん:2008/11/01(土) 07:20:10
>>282-285
そういうのはふつうsequenceを使う

289 :デフォルトの名無しさん:2008/11/02(日) 02:04:12
>>288
DBによって実装方法は異なる

Oracle.PostgreSQL sequence
MS-SQLServer IDENTIFYプロパティ
DB2 DENTIFYプロパティ+sequence

290 :デフォルトの名無しさん:2008/11/04(火) 21:06:35
SQL:2003では2つが規格化されたね

Sequence Generators
Identity Columns

291 :デフォルトの名無しさん:2008/11/04(火) 22:00:32
質問なんですが次のテーブルがあるとします。
●社員名簿(emp_tbl)
INT emp_id
VCAHR() emp_name

●プロジェクトテーブル(proj_tbl)
INT proj_id
VCAHR() proj_name

※各プロジェクトは一人以上の社員が属します。また一人が複数のプロジェクトに属すこともあります。

●質問
社員がプロジェクトに属していることをどう表現するの?

案1:proj_tblに配列(?)カラムmemberを追加し、ここにint型の社員番号(emp_id)を格納していく。
案2:新しくproj_member_tblというテーブルをつくり、このテーブルにproj_id emp_idというカラムを用意して
proj_id │emp_id
───┼───
   1 .│1
   1 .│2
   2 .│1
   2 .│3
のように表現する。

教えてDBの偉い人

292 :デフォルトの名無しさん:2008/11/04(火) 22:14:36
>>191
●プロジェクト配員テーブル
INT emp_id
INT proj_id

293 :191:2008/11/04(火) 22:16:48
名称はプロジェクトメンバーテーブルでもプロジェクトアサインテーブルでもいいです。

294 :デフォルトの名無しさん:2008/11/04(火) 22:31:17
>>292さん、ありがとうございます!

295 :デフォルトの名無しさん:2008/12/16(火) 14:04:49
>>291とほとんど同じ状況なんだけど、加えて以下のような条件が加わる場合
どう設計すべき?

・社員はプロジェクト内での順序付けがある
・順序は恣意的に変更され得る
・プロジェクトPのN番目の社員といった読み取りが非常に多い
・プロジェクトに所属する社員の数に制限は無い(恐らく1000は超えない)

296 :デフォルトの名無しさん:2008/12/19(金) 13:56:00
スタンドアロンDBシステムでお勧めなのはAccessでしょうか?
調べたらMSDEってのを見つけたんですけどクライアントサーバ型に適するって書いてあったので。
Oracleも多分クライアントサーバ型でしょうし。
スタンドアロンDBってあまりないんですかね?

297 :デフォルトの名無しさん:2008/12/19(金) 14:47:13
つSQLite

298 :デフォルトの名無しさん:2008/12/23(火) 13:17:39
Haskell用ドライバとかあって吹いた>SQLite
楽しそう

299 :デフォルトの名無しさん:2009/01/03(土) 19:40:07
299

300 :デフォルトの名無しさん:2009/01/03(土) 19:40:30
300

301 :デフォルトの名無しさん:2009/01/25(日) 12:59:36
301
みんなSQLのことなんて読む?
エスキューエル
シークェル
シーケル

302 :デフォルトの名無しさん:2009/01/25(日) 14:12:23
エスキューエル

303 :デフォルトの名無しさん:2009/01/25(日) 20:19:35
いまどきシーくぇるなんて呼んでいる奴はキチガイか変態


304 :デフォルトの名無しさん:2009/01/25(日) 20:50:06
外人じゃね

305 :デフォルトの名無しさん:2009/01/26(月) 00:08:51
ってことはキチガイか変体だな

306 :デフォルトの名無しさん:2009/01/26(月) 05:34:42
いまどきキューリーなんて呼んでいる奴も基地外か変態だ。

307 :デフォルトの名無しさん:2009/01/26(月) 09:34:25
<img src="./img/****"> のファイル名の部分に、MySQLの値 $row["@@@@"]をいれたいんだが
上手く表示できない・・・誰か助けてください><

308 :デフォルトの名無しさん:2009/01/26(月) 10:00:23
すんませんできますた

309 :デフォルトの名無しさん:2009/02/20(金) 07:41:09
はじめまして。皆さんの知恵を貸してください!

SQL Server 2005を使って以下のようなアプリを組んでいます。

SQL Server内にDBを2つ作成し、ひとつを格納DB、もうひとつを展開DBと呼びます。
格納DB内にはデータを格納するためのテーブルがひとつあり(格納テーブルと呼びます)、
格納テーブルにデータがInsertされるとトリガーによりストアドプロシージャ(Transact-SQL)が実行されます。
このストアドプロシージャは、格納テーブルのデータをインプットとし展開DBに反映します。
尚、格納テーブルにはプライマリーキー(IDENTITYにより自動裁番)を設定しています。

上記アプリを組んでいるのですが、以下のような問題が発生しています。
1.複数端末から格納テーブルにほぼ同時にレコードを追加した際、後発のトリガーがタイムアウトになってしまい、エラーとなる
2.トリガーがエラーとなった場合、格納テーブルへのレコード追加が無効になってしまう

上記問題を解決するための知恵をお貸しください!
理想は、格納テーブルにデータを格納した場合でもタイムアウトが発生しないようにしたいです。
展開DBへの反映遅れは数分であれば問題ありません。
ちなみにストアドプロシージャの平均実行時間は10秒程度です。


310 :デフォルトの名無しさん:2009/02/20(金) 22:10:53
>>309
処理するタイミングを分ける。

・端末からの通信で開始 → 格納テーブルへの追加 → 終了
・ジョブなどを使って一定時間毎に開始 → 格納テーブルから反映されていないデータを読み取り → 展開DBへの反映 → 終了
展開DBに反映済みかどうかの判定には格納テーブルに反映済みフラグ列でも作って管理する。

あとは、ストアドを早くする、タイムアウトの時間を延ばす。

311 :デフォルトの名無しさん:2009/04/06(月) 04:01:32
スルー推奨

312 :デフォルトの名無しさん:2009/05/29(金) 17:32:07
フィールドって言うんですか、「項目」。

既存のフォームに追加したいんですけど、さっぱりわかりません。

sunの無料のbaseです。


313 :デフォルトの名無しさん:2009/05/29(金) 17:40:28
あげ

314 :デフォルトの名無しさん:2009/05/29(金) 18:09:56
>フォームに追加したい
>sunの無料のbaseです。
…はあ。
>さっぱりわかりません。
ホントにね。

315 :デフォルトの名無しさん:2009/10/11(日) 10:32:03
仮想テーブルって実データをコピーして持っているのか
参照を持っているのかどちらでしょう?

316 :デフォルトの名無しさん:2009/10/12(月) 14:24:09
実装に寄る。

317 :デフォルトの名無しさん:2009/12/14(月) 18:57:00
.NET 4.0 から System.Data.OracleClient は推奨しないよ
ttp://blogs.msdn.com/adonet/archive/2009/06/15/system-data-oracleclient-update.aspx
という話は知ってたが、まさか自分がその「修正するつもりのないバグ」に遭遇するとは思わなんだ。
ttp://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=411873

まじすか…orz

318 :デフォルトの名無しさん:2009/12/16(水) 12:24:00
.netからpro cでも呼ぶか、.net捨ててpro cで全部組めば。
全部phpでもいいけど。

319 :デフォルトの名無しさん:2009/12/16(水) 14:47:57
>>318
できるかンなこと!w
MS 推奨の ODP.NET 使うよりエラいことになるの必至だろ!

つーことで、とりあえず小手先 (クエリちょっと修正) で押さえ込んだ。

320 :デフォルトの名無しさん:2010/02/03(水) 01:36:58
今のMysql5.1ってdoubleとか文字列に変換しないでそのまま格納できるみたいだが、
C++で格納したり取り出したりできるの?
atofとかじゃ誤差で使い物にならん。

321 :デフォルトの名無しさん:2010/02/03(水) 11:18:01
検索出来なくて良ければ生で突っ込めばいいだけ。mysqlに限った事でもない。

http://pc11.2ch.net/test/read.cgi/db/1258928470/
MySQL 総合 Part17
http://pc11.2ch.net/test/read.cgi/db/1056957157/
DB板自治・質問・雑談スレ
http://pc11.2ch.net/test/read.cgi/db/1252492296/
SQL質疑応答スレ 9問目
http://pc11.2ch.net/test/read.cgi/db/1207476744/
RDBMS比較総合スレ 【サーバ】

322 :sage:2010/02/03(水) 11:51:11
初めて触ったのはinformixだった。
その会社があるとき忽然と消えたので
仕方がないのでMSのにしたが使い勝手が悪かった。
仕方がなく自作していたらすごいものになってしまった。
これをベクトル型データベースと名づけたい。

323 :デフォルトの名無しさん:2010/02/03(水) 13:08:14
無料で公開してくれ。パクって販売して大もうけするから。

http://pc11.2ch.net/test/read.cgi/db/1057152569/
[終了]今は亡きInformixに文句を言うスレ[おつかれ]

324 :デフォルトの名無しさん:2010/02/03(水) 14:03:11
無料で公開されるものを金出して買う人間がいればいいが

325 :デフォルトの名無しさん:2010/02/05(金) 03:20:39
そこは多少手を加えて、サポートで毎月金取るから。
レドハトの毎月保守版と思えばおk。

326 :デフォルトの名無しさん:2010/08/02(月) 18:32:24
データベースをいじるのにVBかC#どっちがお勧めか教えて

327 :デフォルトの名無しさん:2010/08/26(木) 14:14:09
どっちも微妙。
データベース自体は何? SQL Server?

328 :デフォルトの名無しさん:2010/08/26(木) 14:28:45
C#

329 :デフォルトの名無しさん:2010/09/17(金) 23:43:17
なつかしいな


330 :デフォルトの名無しさん:2011/02/10(木) 12:15:10
(´・ω・`)

331 :デフォルトの名無しさん:2011/03/21(月) 21:24:07.29
Microsoft Accessは、サブクエリーがろくに使えないな。
実行速度が極端に遅くなったりとか、構文エラー扱いになったり。
Microsoft SQL-ServerとかOracleとかの普通のDBMSなら、特に遅く
なったり、構文エラーになったりしないはずだ。

332 :デフォルトの名無しさん:2011/03/22(火) 00:17:07.09
>>331
インデックスが効くサブクエリなら
CPUスペック相応の速度で返ってくるけどな
設計がおかしいかスワップしてるんじゃないの

333 :デフォルトの名無しさん:2011/03/26(土) 23:17:10.85
そもそもmdbでがんばってもな。
メモリガッツリ確保してるsqlserverには勝てないでしょ。

334 :デフォルトの名無しさん:2011/04/07(木) 13:33:09.12
sql server compactのフロントエンドになんないかな

335 :デフォルトの名無しさん:2011/04/21(木) 03:14:36.51
RDB初心者なのですが、疑問があるので詳しい方教えていただけないでしょうか?

テーブルのサイズが大きくなると重くなるので、キーのハッシュ値などで、
複数のテーブルにレコードを分散させておき高速化する、パーティショニングなる
技術があるらしいと聞きました。


データベースエンジンは高速に検索するための良いアルゴリズムを
持っているものと想像していたのですが、
この程度の最適化すらされていないということなのでしょうか?

それとも、物理的に別のストレージに割り当てることによって、ストレージのアク
セスを並列に行うことによる高速化を狙っているのでしょうか?

長ったらしい質問で申し訳ありません。一般的なデータベースのボトルネック
がどこにあるかなどの感覚がよくわかっていないもので。

336 :デフォルトの名無しさん:2011/04/21(木) 14:05:10.93
>>335
データーに対してユーザーがどういう検索をするかなんてのは
データーベース側にはわからない。
最適化ってのはある特定の条件に対し最高のパフォーマンス出すように
チューニングすることだからな。

インデックスの種類についても知っておくと良いよ


337 :デフォルトの名無しさん:2011/04/21(木) 15:10:29.58
ウマく最適化する設計をしないと駄目なんじゃない。

自家用車が高速走れても、f1の様な競技に出たり、災害復興の燃料運ぶのには最適化されてないだろ。
ちゃんとf1や災害復興を想定して自家用車の設計しないと。

338 :デフォルトの名無しさん:2011/04/21(木) 15:14:58.52
高級言語で記述すると実行が遅く成ったりするから、アセンブラで記述すると言う技術が有るのに、プログラマなら高速に実行する為の言語を習得していると想像しているのに、
実際はみんなアセンブラ程度すら組めずに計算機に最適化すらされてない低スペックだったりするのと同じ。
プログラマの生産性のボトルネックってどこに有るのだろうねw

339 :335:2011/04/23(土) 00:21:54.78
みなさん親切なお返事ありがとうございます。

確かに検索する条件、頻度、キーの分布など考えて最適化する必要は
大いにあると思います。

私の経験の範囲では、ほとんどのクエリが連番IDのみをキーに検索する
ようにテーブルを用意できることが多く、そのイメージで考えたときに
疑問が起こりました。

現在抱えている要件では、ユニークな連番IDを持つテーブルを、
そのIDのみで検索するが、それが非常に多くの端末から頻繁に発行される。
というものです。しかも単独のテーブルに対してです。

当然連番IDにプライマリキーを設定しているのですが、
このくらいシンプルな条件の場合でパーティショニングに効果はあるのでしょうか?


340 :デフォルトの名無しさん:2011/04/23(土) 02:02:44.69
>>339
連番IDがある範囲で分けられるなら意味はあるかもしれない。
年度の範囲でパーティション化して検索自体が当年分が多いとか。

ただその案件だとレプリカ作ってアクセス分散したほうがいいかもね


341 :335:2011/04/23(土) 15:09:45.56
>>340
なるほど、連番ID以外のカラムで、検索の偏りがある分類ができるのなら、
その分類でパーティション化する意味が出てくるということですね。

今すごくイメージが湧きました。

レプリカつくってアクセス分散というのは、当初>335で私が書いたように、
ストレージのアクセス時間を分散して並列化させるという意味合いで
あっていますか?

レコード内容は、比較的頻繁に書き換えが起こるのですが、このテーブルに
レプリカを作った場合、同期処理によって負荷が逆に高くなる心配などは
あまりしなくてよいものでしょうか?

質問ばかりで申し訳ありません。

342 :340:2011/04/23(土) 17:05:03.14
>>341
参照系かと思ってレプリカと書いたけど
DBMS何つかってるかわからないが
更新があるならなるべくメモリにのるようにパラメータ調整したほうがいいかも


343 :デフォルトの名無しさん:2011/04/26(火) 08:52:38.04
結局負荷を気にしたら、オンメモリデータベースに行き着くのかもねえ。
Oracle TimesTen In-Memory DatabaseやOh-Pa 1/3とか。
ググッタ感じだと小田急とかケンタとかサンクスとかOh-Pa 1/3使ってたりするのねえ。

344 :335:2011/04/28(木) 00:41:13.84
>>342
MySQLを使用しております。
メモリ上にキャッシュを置くことが効果的だろうことは理解できるのですが、
一般的なDBMSは特に設定を行わない場合にメモリキャッシュを勝手に
使ったりはしないものなのでしょうか?

使用する側で多くの手間をかけて検索の最適化をするくらいなら、
最初から自分でデータ管理処理を書いたほうが融通が効いて楽な気さえ
してしまいます。

これもDBMS初心者の無知ゆえかもしれませんが。

345 :デフォルトの名無しさん:2011/04/30(土) 11:36:37.51
>>344
MySQLは使った事がないので知らんが、通常「限られたメモリを配分する
のに何を重視するか」の設定をする場合が多い。DBMSはデータ以外にも
いろんなものをメモリ上に置いている。バランスの問題。

ちなみにパーティショニングの検討が必要なのは、テーブルのサイズが
2GBを超えるようなでかいテーブルだ。at Oracle

346 :デフォルトの名無しさん:2011/04/30(土) 16:11:45.29
そもそも無料のmysqlで困らない程度じゃなあ。

ttp://dev.mysql.com/doc/refman/5.1/ja/memory-storage-engine.html
13.7. MEMORY (HEAP) ストレージエンジン

347 :デフォルトの名無しさん:2011/05/06(金) 12:05:36.60
>>346
MEMORYストレージなんてものがあるんですね。勉強になります。
クラッシュ時に消えてしまっては困るので、通常のテーブルと
同じ構成で2重化しておき、書き換えを伴わない場合はこちらを
使うなどすれば、キャッシュとして使えそうですね。

ところで、有料のデータベースエンジンであればMySQLに比べて
困らないことが多いのでしょうか?

調べてみても機能・性能面での違いがよくわからないのです。


348 :デフォルトの名無しさん:2011/05/06(金) 15:18:06.76
まあ実際困った事が無ければ、ググって探し切れても実感はしないかもね。
オンメモリじゃないと捌ききれないって状況は結構有ったりする。

349 :デフォルトの名無しさん:2011/05/26(木) 14:42:31.62
浮上

350 :デフォルトの名無しさん:2011/06/10(金) 00:19:47.17
>>331
MySQLも碌につかえねーぞ

351 :デフォルトの名無しさん:2011/06/11(土) 23:54:26.24
その辺は商用というか開発費にもろに関係してるだろうな。
買うのにも年間保守料にも高額のコストが必要なほうがやっぱりきっちり作り込みされてる。

そこまで要らないよって場面も多いので使い分けというか選択肢がたくさんあってもいいとは思うけど。

352 :デフォルトの名無しさん:2011/08/23(火) 00:46:21.45
データベースをプログラミングするスレじゃなくて
データベースを使ったプログラミングをするスレか

353 :デフォルトの名無しさん:2011/09/14(水) 14:52:34.69
MDBって、Win64でも使えますか?

354 :デフォルトの名無しさん:2011/09/19(月) 02:03:13.83
DB板ってなんで隔離されてんの?
ミドルウェアだからとか言う理由なら、
ミドルウェア板作って統合すりゃ多少は賑わうんじゃね。

355 :デフォルトの名無しさん:2011/09/19(月) 05:51:52.24
特殊だからだろ、ハゲっが。
SQL文っは、プログラムでもない、
だが、DBっは、奥が深いだろ、ハゲっが。

356 :デフォルトの名無しさん:2011/09/19(月) 10:07:31.37
だったらDBへ帰れよチビ

357 :デフォルトの名無しさん:2011/09/19(月) 12:27:47.16
          ∧_∧
         ( ´・ω・`)     ∧_∧
         /     \   (    )何言ってんだこいつ 
     .__| |    .| |_ /      ヽ
     ||\  ̄ ̄ ̄ ̄   / .|   | |
     ||\..∧_∧    (⌒\|__./ ./
     ||.  (    )     ~\_____ノ|   ∧_∧
       /   ヽ 空気読めよ   \|   (    ) 
       |     ヽ           \/     ヽ. オマエ馬鹿だろ
       |    |ヽ、二⌒)        / .|   | |
       .|    ヽ \∧_∧    (⌒\|__./ /

358 :デフォルトの名無しさん:2011/09/22(木) 23:50:13.63
>>357
てめぇのせいでスレが止まったじゃねぇかどうしてくれる

359 :デフォルトの名無しさん:2011/09/29(木) 03:41:43.18
「SQL」が略称か否かで揉める奴が必ず居るけどあれって何なの?
wikiの説明文みたいに

360 :デフォルトの名無しさん:2011/10/01(土) 12:13:49.74
Visual Basic 2010 で、データベース入出力のバッチ処理を行うためのプログラムを書きましたが、非常に時間がかかります。
・ 具体的には、3列の表に10個のデータを格納するだけで11秒などという時間がかかっています。

以下に述べる構成のうち、設計として悪い部分は複数あるだろうと思いますが、パフォーマンスに影響する問題点を指摘してください。
・ Database.sdf のテーブルを DataSet.xsd の編集画面へドラッグ&ドロップすると、DataTable, TableAdapter の派生クラス MyTable, MyTableAdapterが生成されました。
・ MyTable という Public Class を作り、MyTableAdapter のインスタンス adapter を Private Shared 変数に格納しています。
・ MyTable には、上記 adapter を (入出力を加工しながら) 操作する Public Shared メソッド/プロパティを実装してあります。


361 :360:2011/10/02(日) 12:15:46.81
>>360 自己解決。超バカだった。これから具体的に書きます。

362 :360:2011/10/02(日) 12:17:54.95
・ TableAdapter は実際のデータと DataTable との間をつなぐもの。
・ これを、DataTable と外部コードとの間をつなぐクエリを集めたものと誤解。
・ シコシコと書いたクエリを直接たたいて TableAdapter を操作していたため、毎回 SQL が発行されていた。
orz

363 :デフォルトの名無しさん:2011/10/02(日) 18:59:25.91
単純にDBいじくるだけならADO.NETのデータセットを作る必要すらなくて、DBへの
ラッパークラスを作ってSQLベタ打ちが一番楽で早いという現実


364 :デフォルトの名無しさん:2011/12/12(月) 14:15:25.41
どんなに複雑な抽出分もSQLのみで作成する事が可能なんでしょうか。

365 :デフォルトの名無しさん:2011/12/12(月) 22:50:50.66
そんなことはない

366 :デフォルトの名無しさん:2011/12/12(月) 23:08:06.15
特別な関数が必要なものとか、条件判断のための正確なアルゴリズムが見つかってないものとか、無限大・無限小の計算が必要なものとかは無理だろ。

367 :デフォルトの名無しさん:2011/12/17(土) 14:55:22.10
>>1-1000
おまえら一盛り10円
http://www.kh.rim.or.jp/~nagamura/misc/stroustrup-interview.html

368 :デフォルトの名無しさん:2011/12/20(火) 19:29:27.19
今androidでコミックビューワ作ってるんだけどページを100枚くらい使うともう重くて無理なんでネットからだんだん落としていって100ページ読み込ませようかと。で、ここで使うのがデータベースなのかなあーと思ったんだけど合ってる?

369 :デフォルトの名無しさん:2011/12/23(金) 15:47:39.73
合ってない

370 :デフォルトの名無しさん:2011/12/23(金) 16:15:49.30
正解

371 :デフォルトの名無しさん:2011/12/26(月) 17:25:13.84
え?

372 :sage:2012/01/01(日) 15:31:00.26
データベースプログラミングではないのですが、
B木についての課題で困っています。

こちらで質問してもよろしいでしょうか?

373 :デフォルトの名無しさん:2012/01/02(月) 01:39:47.57
DB板の質問スレかどっかで質問してたひとか


374 :デフォルトの名無しさん:2012/01/11(水) 00:36:33.35
ム板にアルゴリズム系のスレが無くなってるんだよな
誰の仕業かなー

375 :デフォルトの名無しさん:2012/05/20(日) 05:28:05.42
もうデータベース板自体が息してないからなあ。
景気悪くなるとデータベースって一気に話題消えるんだなw

376 :デフォルトの名無しさん:2012/05/25(金) 02:11:35.86
もうプログラム板もいいよな

377 :デフォルトの名無しさん:2012/07/31(火) 05:10:50.04
リレーションとかおまえら使ってる???

378 :デフォルトの名無しさん:2013/02/15(金) 13:38:15.74
      _
      |O\
      |   \ キリキリ
    ∧|∧   \ キリキリ
ググゥ>(;⌒ヽ    \
    ∪  |     (~)
     ∪∪   γ´⌒`ヽ
     ) )    {i:i:i:i:i:i:i:i:}
     ( (    ( ´・ω・)、
           (O ⌒ )O
            ⊂_)∪

379 :片山博文MZパンク ◆0lBZNi.Q7evd :2013/02/23(土) 00:05:22.07
MySQLでシフトJIS使ってたら何かまずい事がある?

380 :片山博文MZパンク ◆0lBZNi.Q7evd :2013/03/01(金) 16:19:24.39
マニュアル見て自己解決

381 :デフォルトの名無しさん:2013/06/09(日) 18:36:09.01
webアプリを作る際にdbを使おうとしています.
javaからいじるときの書き方なんですが
例えばデータを読み取るsql文を発行する関数を作ったときには,
その関数内でStatementとかResultSetとかを閉じるものなのですか?
あと,データベースとの接続を閉じるのはいつにすればいいのでしょうか?

382 :デフォルトの名無しさん:2013/06/11(火) 17:01:57.73
おれはデータベースで何をしたらいいんですか?

383 :デフォルトの名無しさん:2013/07/03(水) NY:AN:NY.AN
履歴テーブルのスマートな実装手段は?

384 :デフォルトの名無しさん:2013/07/06(土) NY:AN:NY.AN
>>383
質問の意図が不明なんだが

385 :デフォルトの名無しさん:2013/08/12(月) NY:AN:NY.AN
>>383
変更時のタイムスタンプと変更内容を正規的に記述する

386 :デフォルトの名無しさん:2013/10/21(月) 11:37:39.16
Entity Frameworkで DbContext を使って開いたデータベースの
テーブルの個数が知りたいのですがどうやったら取得可能でしょうか

387 :デフォルトの名無しさん:2013/10/31(木) 14:29:14.79
Magic quotesはオフにしよう
http://codezine.jp/article/detail/2480?p=2

 本題からは外れますが、特別な理由がない限り、SQL文はプリペアードステートメントを使って実行するようにしてください。
これはSQLインジェクション攻撃に対する最も基本的な対策です。基本的なことにも関わらず、プリペアードステートメントが
あまり使われていないのには以下のような理由があるのではないかと、筆者は推測しています。

388 :デフォルトの名無しさん:2013/10/31(木) 14:30:17.40
SQLを文字列で作って実行するという直観的にわかりやすい方法が入門書等で紹介される。
初心者がそれをそのまま真似る。
SQLインジェクション攻撃に対して脆弱なウェブアプリが量産される。
PHPの開発者が「Magic quotes」というマジックを導入する。Magic quotesによって、ブラウザから送られた「O'Reilly」という文字列は、自動的に「O\'Reilly」に変換されようになる(脆弱性回避)。
この「O\'Reilly」という文字列は、プリペアードステートメントでは使えない(余計なバックスラッシュが入ってしまう)。
プリペアードステートメントは使われなくなる。

389 :デフォルトの名無しさん:2013/10/31(木) 14:31:20.44
 データを勝手に書き換えてしまうMagic quotesがデフォルトで有効になっているのは困ったことです。
PHPをインストールしたら、設定ファイル(php.ini)を探して、「magic_quotes_gpc = Off」としておきましょう。

390 :デフォルトの名無しさん:2013/10/31(木) 14:37:08.30
>>387
5.3 2009-06-30 <- magic_quotes_gpcがobsoleteになる
5.4 2012-03-01 <- magic_quotes_gpcが削除される
5.5 2013-07-20 <- いまここ

391 :デフォルトの名無しさん:2013/10/31(木) 21:36:37.02
NetWareサーバでbtrieve使ってたころは
インジェクションとかなんとか悩む必要なかったんだよな

392 :デフォルトの名無しさん:2014/02/02(日) 00:31:08.57
自分で競馬データベースや競馬新聞を作りたいんだが
どんなプログラミング言語を学習すればいいですか?
競馬を通してプログラミングを勉強すれば楽しいと思うし、
仕事にも役立つとなれば一石二鳥。

データーソースは外部の物を利用。

393 :デフォルトの名無しさん:2014/02/02(日) 01:23:31.88
Haskelです。

394 :デフォルトの名無しさん:2014/02/04(火) 00:07:50.54
>>392
c++、Haskell、Ocaml、Scala
c++ならc++cmsを使ってCMSサイトを作れる
HaskellならYesod、ScalaならLift
速度重視ならc++、バグを含まないように作りたいならHaskell
性能と実績ならJVM上にあるScalaがベターだよ

395 :デフォルトの名無しさん:2014/02/04(火) 00:19:49.83
普通にPHPでええやん
何が不満なの?

396 :デフォルトの名無しさん:2014/02/11(火) 11:02:05.62
PHPが不満

397 :デフォルトの名無しさん:2014/02/11(火) 14:39:35.01
想定顧客数すら見えないんだからPHPかRuby/Railsじゃね

398 :デフォルトの名無しさん:2014/06/25(水) 00:08:06.39 ID:hOEFw5aV
たとえば、1つの製品を作成するのに掛る部品リストのテーブルが以下だった場合。

ID,製品,部品名称,部品個数

グリッドに表示させる時や出力させる時は横に並んでほしい場合は結構あるかと思います。

製品,部品1名称,部品1個数,部品2名称,部品2個数,部品3名称,部品3個数〜〜

こういう時は一般的どうするのがスマートなんでしょうか?
たとえばAccessでグリッドに表示させたい場合、もしくはcsv、Excelで出力したい場合など。

399 :デフォルトの名無しさん:2014/06/25(水) 00:27:43.30 ID:n7E3MpSB
>>398
正規化とビュー

400 :デフォルトの名無しさん:2014/06/25(水) 03:12:58.04 ID:h7VZRPKH
行列変換・クロス表については、ミックの本にも書いてある

達人に学ぶ SQL徹底指南書、2012、ミック
セルコ信者の著者が、より簡単にパズルチックに解説する
内容は集合論、3値論理など

Webにも解説あるよ
ttp://codezine.jp/article/detail/751

401 :デフォルトの名無しさん:2014/07/22(火) 04:18:35.67 ID:lQzj9+dU
C# + Connector/Net + MySQL でデータベースの勉強し始めたんですが、Connector/Netのライブラリを把握しきれないうえに、データベースプログラミングで確実に身に付けるべき作法みたいなものがよく分かりません。
オススメの入門書を教えていただけないでしょうか?

402 :デフォルトの名無しさん:2014/07/22(火) 04:26:53.03 ID:gLVnM0Vt
http://www.atmarkit.co.jp/ait/articles/1211/05/news007.html
http://www.atmarkit.co.jp/ait/articles/1202/27/news128.html
http://www.atmarkit.co.jp/ait/articles/1305/13/news006.html
http://thinkit.co.jp/story/2013/07/18/4171
http://itpro.nikkeibp.co.jp/article/COLUMN/20100713/350190/

403 :デフォルトの名無しさん:2014/11/06(木) 21:15:47.38 ID:chc+9Rz7
みんなの意見を聞かせてください
データベースを設計しているんだけど、
例えば、定食マスタがあるとしてそれの内容を持ってるテーブルが別にあるとする
A定食に対して、おひたし・ごはん・味噌汁・豚肉炒め・サラダ等
んで、あるとき豚インフルで豚肉が提供できなくなったとして、豚肉炒めから牛肉炒めに変更しA+定食にしたとする(値段等そのたの問題は抜きとする)
その場合、定食の構成としては1品しか変わらないわけだけど、それぞれに同じ構成を持つとデータだけ増えていくよね
例だと品数は少ないけど、定食の数も数百種類、それぞれの構成も何十種類となった場合、
基本はAの構成だけど、バージョンが上がって一部構成が変更になった場合、
どういう風にデータベースを設計したらいいと思いますか?
やはり別のものとして丸々構成を持った方が良いのでしょうか?
説明が下手ですみません。どうかよろしくお願いします。

404 :デフォルトの名無しさん:2014/11/06(木) 21:40:39.96 ID:6jrte84K
>>403
数百や数千なら個別に作るけどな
定食なら日本全国のを集めても数千も無いだろうしwww

405 :デフォルトの名無しさん:2014/11/07(金) 07:02:18.20 ID:QVJdWUqC
>>403

BOMとか部品表とかで色々調べるとよいかも。
テーブルの使い方次第だけど、定食が1日に100百食作る予定だから、
あらかじめ材料を何キロ買っておく、みたいな使い方をするなら、
12月1日からのA定食の構成要素をはこれとこれを含むという
適用範囲を持ったテーブルになると思う。

まぁ、テーブルの使い方によって設計が変わるはず

406 :デフォルトの名無しさん:2015/02/14(土) 22:52:28.31 ID:WlrY+q6b
C# で、System.Data.SQLite を利用しているのですが、
データベースファイル内のテーブルの数、ないしテーブル一覧を取得するにはどうすれば良いでしょうか?

407 :デフォルトの名無しさん:2015/02/15(日) 09:08:49.39 ID:lVCsB9EK
.schama

408 :デフォルトの名無しさん:2015/02/15(日) 09:31:44.71 ID:twE3uD4t
長いことIT業界にいるが、
いまだに排他制御が完全なシステムを
作ってるのに出会ったことがない・・・

俺自身、どのレベルで何をどうしたら
完璧になるのか良く分かってないしな。

409 :デフォルトの名無しさん:2015/02/15(日) 09:59:39.37 ID:Mh0LkIrH
DBアクセスのたびにDB全体を完全ロックすれば完璧だよ!

410 :デフォルトの名無しさん:2015/02/15(日) 11:36:22.84 ID:24ypMGtK
DB用に専用線を引いて、通信を暗号化すれば完璧だよ

411 :デフォルトの名無しさん:2015/02/15(日) 11:59:28.83 ID:iz0G57zc
入力時点でシリアル化しとけば排他制御いらんな。

412 :デフォルトの名無しさん:2015/02/15(日) 12:18:07.77 ID:n2M7TY52
>>408
汎用機のオンラインシステムは完璧な排他制御を求められたんだがな。

413 :デフォルトの名無しさん:2015/02/15(日) 13:31:12.71 ID:SSlwb3yD
RDBなら本来、アプリケーション側で排他制御なんかしないよな。

414 :デフォルトの名無しさん:2015/02/15(日) 13:41:39.84 ID:Mh0LkIrH
DBにとって必要な整合性と、アプリにとって必要な整合性は違うのだよ

415 :デフォルトの名無しさん:2015/02/15(日) 16:14:21.62 ID:bX6frV1s
HTTPとの相性最悪

416 :デフォルトの名無しさん:2015/02/15(日) 17:18:02.87 ID:62ZsaQxV
素人乙

417 :デフォルトの名無しさん:2015/02/15(日) 18:14:23.37 ID:n2M7TY52
>>413
データベースが勝手に排他制御をしてくれるとでも?

418 :デフォルトの名無しさん:2015/02/15(日) 19:03:52.03 ID:SSlwb3yD
当たり前だろ。そうじゃなきゃDBMSの意味がない。
で、普通は明示的な排他制御などやらずに適切なトランザクション分離レベルを宣言するんだが、
わかってない奴が設計するとそこが適切じゃなくて、「この処理の前にこっちのテーブルをロックしなきゃ」
なんてことになる。

419 :デフォルトの名無しさん:2015/02/15(日) 19:06:51.51 ID:Mh0LkIrH
レベル宣言だけで上手くいくもんか

420 :デフォルトの名無しさん:2015/02/15(日) 19:10:05.48 ID:twE3uD4t
>>418
テーブルに最終更新時間とか持たせて、
表示させた後にDBに書き込むときに、
最終更新時間が取得したときと違ってたら
エラーを表示するとかなんたらって、
ズラズラとコードを書いたりしないか?

421 :デフォルトの名無しさん:2015/02/15(日) 19:57:11.17 ID:n2M7TY52
>>418
分離レベルだけで勝手にやってくれるとでも?

422 :デフォルトの名無しさん:2015/02/15(日) 19:59:36.27 ID:SSlwb3yD
>>420
ロングトランザクションのために仕方なく読み出しと書き込みを分けるなら、たしかにそういう、
いわゆる楽観的ロックを使う場面もあるね。
その場合は両者のトランザクションは独立したものとして、つまり読み出しがない書き込み
トランザクションにも正しく対応できるよう設計すればいい。
もちろんこれも「排他」制御ではない。

423 :デフォルトの名無しさん:2015/02/15(日) 20:43:21.86 ID:n2M7TY52
>>422
そういう同時実行時の不整合を起こさない仕組みも含めたのを排他制御とは言わないのかい?

424 :デフォルトの名無しさん:2015/02/27(金) 10:28:05.63 ID:+9m5pWTV
>>419
>>414が良い事言ってる。と思ったら414=419かよw
すくなくとも「DBにとって必要な整合性」は保障されるだろ
>>418が「アプリにとって必要な整合性」をどう考えてるのかは知らんが
>>422あたりを見るに、それは>>418にとっては排他処理ではないらしいから考慮外なんだろう

理想は分離レベルの指定だけですべて済ませればいいんだが
なかなかそう言うわけにはいかないのが現実

425 :デフォルトの名無しさん:2015/02/27(金) 12:40:39.68 ID:+8onCSYI
apache hbase 1.0キター
http://sourceforge.jp/magazine/15/02/26/150800

426 :デフォルトの名無しさん:2015/03/10(火) 00:30:56.39 ID:4vRVmU8Z
VB ScriptのADOで
Do

Loop
の中に
rs.movenext書き忘れるとなにがおこるの?

427 :デフォルトの名無しさん:2015/03/10(火) 22:06:12.52 ID:umpnsyO6
>>426
同じ行を処理し続けるんじゃないの?

428 :デフォルトの名無しさん:2015/03/11(水) 10:12:33.26 ID:3uN2N73I
rs.delete してればそのうち終わるんじゃね?

429 :デフォルトの名無しさん:2015/12/31(木) 13:59:49.75 ID:QqVhmS8m
LINEスタンプで不労所得を得る!
http://goo.gl/e18Nmy

430 :デフォルトの名無しさん:2016/01/19(火) 14:37:25.78 ID:o7PI7tBC
SQLServerで教えて下さい。
saユーザでログインし、管理者用のDB_Aと、
ユーザ用のDB_Bを作成し、
ユーザ用のユーザを作成しました。
DB_Aにselectするために権限を振りたいのですが、うまくいかないです。
どのようにすればいいですか?

431 :デフォルトの名無しさん:2016/01/20(水) 16:37:02.67 ID:NQlxuzeF
データベース板にMSSQLスレあるよ

432 :デフォルトの名無しさん:2016/01/20(水) 19:46:17.26 ID:F8N6o/ie
>>430
どのユーザーでどのユーザー

433 :デフォルトの名無しさん:2016/02/01(月) 00:25:24.43 ID:3WuLHwNd
検索の仕方が悪いのか、データベースのデータから特定のx行y列目の値を一つの変数へ格納する方法が見つからない…


コマンドプロンプト上で検索するやり方は特定の行または列だけ。
excelなら行と列を指定すればそのセルの値を取得できるが、他の面で不便だ

SQliteなんだが、特定のx行y列目の値を一つの変数へ格納する方法が知りたい

434 :デフォルトの名無しさん:2016/02/01(月) 05:21:16.21 ID:xBjz7JvU
>>433
変数って何の変数だよ?

435 :デフォルトの名無しさん:2016/02/01(月) 06:09:47.86 ID:lA57fNjF
データベースに行数列数なんて概念あんの?

436 :デフォルトの名無しさん:2016/02/01(月) 06:19:13.75 ID:xBjz7JvU
>>435
はあ?

RDBは行列の2次元の表が基本だぞ。

437 :デフォルトの名無しさん:2016/02/01(月) 06:21:27.24 ID:xBjz7JvU
>>433
RDBには行の順番というものはないぞ。

438 :デフォルトの名無しさん:2016/02/01(月) 09:24:33.50 ID:teirB2/w
SELECT 文に ORDER BY をつけてようやく順番が決まった表みたいなものになる
数十万、数百万件もあるかもしれないデータをいきなり何行目とか指定できない
順番にfetchするとかカーソル使うとか、、、特定の何番目かの行だけ取り出したければ
LIMIT OFFSET使うとか

439 :デフォルトの名無しさん:2016/02/01(月) 09:32:31.63 ID:3WuLHwNd
>>434
>>437
行"数"は無いのか…。

多くのサイトの説明だと

「select カラム from テーブル where 条件」で抽出できる、みたいに書いてある。
けれど抽出したデータを任意に作った変数にどう取り込むのか、までは載ってないんだ…

変数っていうのは、ゲームの例で言えば、
特定のモンスターの能力値を読み込むときに、モンスターに振り分けたIDなりでデータベースを検索して、
攻撃力・守備力・魔法力の数値が全部載ってる行を見つける

けれど、そのまとまった情報をゲーム上のステータスにどう反映すればいいのかがわからない。
攻撃力を表す変数Xに攻撃力の数値を入れたいんだよね。

440 :デフォルトの名無しさん:2016/02/01(月) 13:22:29.13 ID:gmWomOLn
レコードを特定して列指定で格納値を取得
さらに列の型に応じてゴニョゴニョする…とこの辺がわかってないのか

C/C++ じゃなくて VBとかスクリプトだと余計なこと考えなくていいんだけど
多分ダメなんだろうな

441 : 【末吉】 :2016/02/01(月) 15:01:28.17 ID:C4njzqYk
>>433
>「select カラム from テーブル where 条件」で抽出できる、みたいに書いてある。
>けれど抽出したデータを任意に作った変数にどう取り込むのか、までは載ってないんだ…

change your mind
わからなければORMでも使えばいい

442 :デフォルトの名無しさん:2016/02/01(月) 19:01:11.15 ID:3WuLHwNd
みんなのくれるヒントをもとに検索かけてるんだがやっぱりだめだ……

>>441
ORMというものの説明をさっくり見ても理解できなかった。すまん

>>440
VB.netのほうが取っつきやすいから、そっちのほうで良い方法を載せてるサイトを知らないか?

443 :デフォルトの名無しさん:2016/02/02(火) 00:31:00.26 ID:I6GVlLy1
>>442
サブクエリで検索したまえ

444 :デフォルトの名無しさん:2016/02/02(火) 01:49:46.31 ID:hbRk5EKW
日を跨いですまん

>>443
これはわかりやすくて使いやすいな。
ただ最も知りたいのは、ここから自分の作った変数へ当て嵌める方法でな…。

たとえば ttp://www.dbonline.jp/mysql/select/index20.htmlの例を使うなら、
サブクエリを使って求めた行のうちのname"〜"の値を、適当な変数Xに入れて X = "〜" としたいんだ。

445 :デフォルトの名無しさん:2016/02/02(火) 02:12:05.74 ID:Nia4wB+/
>>442
VB.NETつかうんならADO.NET使えば?

446 :デフォルトの名無しさん:2016/02/02(火) 08:19:43.05 ID:8a5xHyeA
変数ってホストの話か?お前らよく付き合うな。言語も環境もなんも書いてないのに。

447 :デフォルトの名無しさん:2016/02/02(火) 14:44:58.86 ID:chGMw9p3
馬鹿には無理

448 :デフォルトの名無しさん:2016/02/04(木) 18:31:06.37 ID:kJqvXS0n
住所氏名電話番号とかいろんなデータに、どんなデータ型が最適かまとめられたリストってありませんか?

449 :デフォルトの名無しさん:2016/02/04(木) 18:57:06.90 ID:cZxKqYB+
ありますよ

450 :デフォルトの名無しさん:2016/02/04(木) 20:43:57.05 ID:ZPaMq02w
安心してください

451 :デフォルトの名無しさん:2016/02/04(木) 21:27:28.08 ID:gLwjaquz
>>448
全部VARCHAR

452 :デフォルトの名無しさん:2016/02/04(木) 23:38:59.91 ID:DpQoYKor
ipaが共通語彙基盤とかいうのやってるね

453 :デフォルトの名無しさん:2016/02/05(金) 07:24:45.41 ID:z5njROW4
何それ不安しかない

454 :デフォルトの名無しさん:2016/02/16(火) 22:06:45.67 ID:C4gEAWu1
質問なんですが、
accessはもちろんofficeすらインストールしていないpcで、
vs2015から、mdbファイルを利用できます
またaccessをデータセットとして利用できます
これ何ででしょうか?
もしかしてvs2015には、もれなくaccessもついてくるのかな?
当方、日曜プログラマです
上記は、JRAVAN,datalab競馬ソフト開発体験教室レッスン7を実行した結果です
http://jra-van.jp/dlb/sdv/trial.html

455 :454:2016/02/16(火) 22:15:23.66 ID:C4gEAWu1
いや、日曜プログラマだと語弊があるかもしれない
日曜日に趣味で勉強しているおっさんです
プログラマではないです

456 :デフォルトの名無しさん:2016/02/17(水) 00:01:04.23 ID:SSk10E0a
accessという製品はタダでは付いてきません
mdbにアクセスするためのプロバイダはoffice無しでも利用できます

457 :デフォルトの名無しさん:2016/02/17(水) 00:57:40.92 ID:MF/QCRL8
>>456
レスども
やっぱりaccessはないわけですか
あれ有料ですもんね
ありがとうございました

458 :デフォルトの名無しさん:2016/02/17(水) 07:18:01.15 ID:MgT/kZYs
LibreOffice を使えば?

459 :デフォルトの名無しさん:2016/02/17(水) 13:21:34.95 ID:MF/QCRL8
>>458
accessとbaseの互換性がいまいちわからないんですよね
mdbファイルは開けるけど
現状dbはほぼ未経験、accessもbaseも未経験
adoの勉強始めたとこですね
選択肢の1つとして考えときます
ありがとうございます

460 :デフォルトの名無しさん:2016/02/17(水) 22:15:55.38 ID:xErgmETY
libreOfficeっていけてるデータプロバイダあんの?

461 :デフォルトの名無しさん:2016/02/18(木) 12:58:46.87 ID:S96kZ0X7
>>454
テーブルで RDB したいだけだったら Access は不要

462 :デフォルトの名無しさん:2016/02/18(木) 13:00:40.69 ID:S96kZ0X7
>>460
libreOffice から mdb にリンクするのが吉

463 :454:2016/02/19(金) 22:28:46.73 ID:zOCPbD4l
>>461
そうみたいですね
Accessは入ってるけど、機能制限がかかってる感じなのかな

464 :デフォルトの名無しさん:2016/02/21(日) 10:39:25.91 ID:zmvsu5mb
>>463
Accessは入ってない

465 :デフォルトの名無しさん:2016/02/26(金) 19:25:15.74 ID:7ZwiQuKz
Access2016のダウンロード版のダウンロードサイズが1kbということは、
機能はwindowsに入ってんのかね?1kbはライセンスだけだよな

466 :デフォルトの名無しさん:2016/02/26(金) 21:13:28.84 ID:jCv12aZp
再配布用のランタイムだけでも300MBくらいあるべ
https://www.microsoft.com/en-us/download/details.aspx?id=50040

467 :デフォルトの名無しさん:2016/02/26(金) 21:30:46.59 ID:/FtM6vZD
>>465
Webインストーラーでしょ

468 :デフォルトの名無しさん:2016/03/03(木) 17:58:33.89 ID:PglFNqeT
このスレ12年も存在し続けてるのかw

469 :デフォルトの名無しさん:2016/08/25(木) 16:35:33.34 ID:f1qIuq6X
質問失礼します。

以下の順番でレコードの重複回避処理を行っています。

@ A.php で Z テーブルの X カラムの値が 49 のレコードを select してレコードの存在チェックを行う。

A @で存在しなければ、A.php で Z テーブルの X カラムの値が 49 のレコードを insert する。

今日、上司からAで insert している最中に他の A.php が走り、

2回レコードが insert されてしまう(つまりレコードが重複してしまう)可能性があるんじゃないの?って聞かれました。

そういう事は考えられるのでしょうか?

またそれを回避するにはどういう SQL 文(トランザクションでしょうか?)を書いたら良いのでしょうか?

分かる方、よろしくお願いします。

470 :469:2016/08/25(木) 16:41:17.60 ID:f1qIuq6X
すいません。
開発環境を忘れてました。
php7.0.6
MySQL5.6
よろしくお願いします。

471 :469:2016/08/25(木) 16:46:28.67 ID:f1qIuq6X
すいません。また補足です。

Z テーブルの X カラムにユニーク属性は付けていません。

他にもカラムがあって設計上付けないことになっています。

472 :デフォルトの名無しさん:2016/08/25(木) 16:48:36.83 ID:9o9g1zI8
>>469
> そういう事は考えられるのでしょうか?
考えられる。

> またそれを回避するにはどういう SQL 文(トランザクションでしょうか?)を書いたら良いのでしょうか?
Z.Xにユニーク制約をつけるのが一番簡単。

473 :デフォルトの名無しさん:2016/08/25(木) 16:52:28.51 ID:9o9g1zI8
>>471
> Z テーブルの X カラムにユニーク属性は付けていません。
そうなんだ。
じゃ最適解はわからない。テーブルロックか?

474 :デフォルトの名無しさん:2016/08/25(木) 21:09:39.15 ID:KSci4OQ9
@とAをSerializableなトランザクションでやればいい。

475 :デフォルトの名無しさん:2016/08/26(金) 15:10:39.88 ID:UM2x8X0F
>>474
それでは無理

476 :デフォルトの名無しさん:2016/08/26(金) 20:31:32.61 ID:dDBcLzC2
できるだろ。
SERIALIZABLEの意味わかってるか?

477 :デフォルトの名無しさん:2016/08/29(月) 14:33:26.91 ID:SnTWW0f8
>>476
こういうケースで問題がある。

table t: (a integer, b integer)
user1がa=3のレコードを、user2がa=4のレコードを同時に作成しようとする。
本来なら、別のデータを登録する処理なので、両立すべき。

user1: set tx_isolation = serializable;
user1: begin;
user1: select count(*) from t where a=3; -> データがないことを確認できる
user2: set tx_isolation = serializable;
user2: begin;
user2: select count(*) from t where a=4; -> データがないことを確認できる
user1: insert into t values(3, 300); -> 処理がブロックする
user2: insert into t values(4, 400); -> エラー発生(Deadlock found)、user1のブロック解除
user2: rollback;
user1: commit;

結果として、user2はデータを登録できない。

478 :デフォルトの名無しさん:2016/08/29(月) 22:22:51.33 ID:/ybRo7IQ
>>469の要件は満たしてるのに、

>本来なら、別のデータを登録する処理なので、両立すべき。

なんでこういう条件を勝手に追加するんだか。

しかも、それぞれのトランザクション分離レベルで守らなければならないことと
実装に任されていることとの区別もついていないようだ。


>user2: select count(*) from t where a=4; -> データがないことを確認できる

ここでuser2をブロックあるいは失敗させてuser1を成功させてもSERIALIZABLEの
要件は満たすし、仮にここでブロックする実装なら

>user2: insert into t values(4, 400); -> エラー発生(Deadlock found)、user1のブロック解除

これをエラーにする必要もないんだが。

479 :デフォルトの名無しさん:2016/08/30(火) 10:23:03.89 ID:FG8f7euN
>>478
> なんでこういう条件を勝手に追加するんだか。
別に勝手に追加したわけじゃなくて、>>477は普通の正常系の話。
複数人が別々のデータを同時に登録するなら、それは成功してしかるべき。

> これをエラーにする必要もないんだが。
なにか勘違いしてるようだけど、>>478は、
・お互い分離レベルがserializableなtransactionにする
・処理は、「存在確認」→「なければinsert」という処理
を普通に行う実装で、「->」以降はそれを実行した結果。

> >user2: select count(*) from t where a=4; -> データがないことを確認できる
> ここでuser2をブロックあるいは失敗させてuser1を成功させてもSERIALIZABLEの
> 要件は満たすし
serializableの要件を満たすことが目的ではないし、普通に実装すればuser2はブロックしないし
失敗もしない。

> >user2: insert into t values(4, 400); -> エラー発生(Deadlock found)、user1のブロック解除
> これをエラーにする必要もないんだが。
どういう意味?
エラーにするんじゃなくて、エラーが発生するんだけど。

480 :デフォルトの名無しさん:2016/08/30(火) 10:26:02.84 ID:FG8f7euN
というか、クライアントを二つ立ち上げて、>>477を実査にやってみれば、俺が言ってることを納得できると思う。

481 :デフォルトの名無しさん:2016/08/30(火) 22:41:53.12 ID:d4TkCE35
>別に勝手に追加したわけじゃなくて、>>477は普通の正常系の話。
>複数人が別々のデータを同時に登録するなら、それは成功してしかるべき。

そもそもトランザクションは常に失敗の可能性があるってことすら理解してないのか。
>>469はそんなもの問題として挙げてないし、これが実際に問題となるかどうかはもう少し
具体的にアクセス規模や性能要件なんかを出して議論するものだ。

>serializableの要件を満たすことが目的ではないし、普通に実装すればuser2はブロックしないし
>失敗もしない。
>エラーにするんじゃなくて、エラーが発生するんだけど。

>>478に書いた「実装」ってのはDBMSの実装のことな。
SERIALIZABLEの要件を満たすのもエラーを出すのもDBMS側の仕事。
極端な話、

>user1: select count(*) from t where a=3; -> データがないことを確認できる

安直なDBMならここでtにテーブル排他ロックをかけるかもしれない。それでも規格準拠だ。
それを踏まえてもういちど>>478を読み返してみな。

>というか、クライアントを二つ立ち上げて、>>477を実査にやってみれば、俺が言ってることを納得できると思う。

>>478と同じことを書くけど、おまえさんはSQL標準で規定されたトランザクションの仕様と
個々のDBMSの実装の区別がついていない。

482 :デフォルトの名無しさん:2016/08/31(水) 10:08:49.24 ID:csb4seou
>>481
あ、MySQL前提じゃなかったんだね。
じゃ話があわない。

483 :デフォルトの名無しさん:2016/08/31(水) 10:23:23.44 ID:csb4seou
標準規格のserializableの話だとして>>478を読み直すと、結論としては>>481はMySQLの分離レベルの
実装はなってないということか?

484 :469:2016/08/31(水) 20:31:43.28 ID:goJly4rw
返答ありがとうございました。

前提条件が不明確でいらぬトラブルを生んでしまったかもしれません。

すいませんでした。


やりたい事をまとめますと「複数同時に実行される A.php で、明確に1レコードだけが挿入されるようにしたい」です。

485 :469:2016/08/31(水) 20:32:39.61 ID:goJly4rw
結局処理は、シリアライズな?トランザクションの使い方も良く分かっていないので以下のように設計しました。

@ Z テーブルの X カラムの値が 49 のレコードが存在するかチェックする(ほとんどの場合はココではじかれる)

A Q テーブルに T レコードが存在していなければ、ユニークなユーザーIDの入った T レコードを挿入する
 INSERT INTO SELECT ?

Bその直後、その T レコードの id (オートインクリメント)の値が一番大きい T レコードを取得する

C T レコードを挿入したのが自分(ユーザーIDでチェックする)ならば、Z テーブルの X カラムの値が 49 のレコードを insert する。

これで A.php が複数同時に走ったとしても一回しか通らないはずです。

大丈夫ですよね?


PDOを利用しています。

要は他スレッド?の A.php による挿入をブロックしなければならないのですが、オーソドックスなやり方を知りたいです。。。


コードが正しいのか、タイミングをほぼ同時にできるかつ自動で微妙に時間をでずらすソフトを作成して、百本ノックならぬ100億本ノックで安全を担保しようとしています。

凄くタコなやり方ですが、これ以外に安全を担保するやり方を知らないので。。。

486 :デフォルトの名無しさん:2016/08/31(水) 21:55:15.56 ID:WV/fnjvU
Qテーブルに1レコードしか存在し得ないよう制約がかけられているのならOK。複数挿入できるならNG。
そもそもそんなQテーブルが作れるのなら素直にZにユニーク制約をかけることを検討した方が
いいんじゃないかとは思うが。
あと、ロングトランザクションなら楽観的ロックも仕方ないが、ちゃんとトランザクションの使い方を
学んだ方が後々苦労せずに済むと思うがねぇ。

487 :デフォルトの名無しさん:2016/08/31(水) 22:08:34.19 ID:3y45z8zT
そもそもMySQLって、エンジンによってはトランザクションそのものをサポートしてなかった気がするけど
MySQLの排他制御がどうなってるか知らんが、普通に考えれば

テーブル全体に排他ロック獲得
チェック
インサート
テーブルロック解除

でできるんじゃね
同時実効性とかロック待ちで性能低下とか知った事じゃないけどな

488 :デフォルトの名無しさん:2016/09/01(木) 00:33:23.21 ID:nGqVI4Wr
>>469
1で存在チェックしてから、2で挿入するって、
1と2の間に、他のプロセスが割り込めるから、典型的なダメパターン。
教科書に書いてある、やっちゃいけない事前問い合わせ

一々、2回もSQL実行するのは無駄。
いきなり、挿入すればいい。
挿入できなければエラーになるだけ

@のような丸囲み文字は、Windowsの環境依存文字だから、使わないように

489 :デフォルトの名無しさん:2016/09/01(木) 04:24:13.09 ID:kgZUAtCs
カタカナは日本でしか通じないから
Englishで書いてください

490 :デフォルトの名無しさん:2016/09/01(木) 10:25:48.93 ID:lxKZC7pd
>>485
おい、いつのまにか対象とするテーブルが一つから二つに増えてるぞ。
あと、値が49ってなんだよ・・・。

> 大丈夫ですよね?
全然駄目。
すなおにテーブルロックすべし。

491 :469:2016/09/02(金) 10:39:25.56 ID:13McY78U
返答ありがとうございます。

一つ間違っていました。

丸3 の「一番大きい T レコードを〜」は「一番小さい T レコードを〜」でした。

>>486
>Qテーブルに1レコードしか存在し得ないよう制約がかけられているのならOK。複数挿入できるならNG。
複数挿入できないように制約をかけます。
良く分かってないので怖いですが、INSERT INTO SELECT(行が無ければ挿入?)で実現しようとしています。

>>487
テーブルロックは使わない方法でご教授いただければと思います。

>>488
丸2 で「存在していなければ挿入」とするので、丸1 は必要ないのですが、念のために入れてるだけです。

>>490
テーブルロックは使わない方法でご教授いただければと思います。

492 :469:2016/09/02(金) 10:41:00.77 ID:13McY78U
>2回もSQL実行するのは無駄
指摘を受けてハッとしました。
やりたい事を伝え忘れていました。
「Z テーブルの X カラムの値が 49 のレコード」は結果テーブル1行だけというのは変わらないのですが、
その直前にわりと大きめのトランザクションが走ります。
そのトランザクションが複数走るのではと心配になっていました。
トランザクションはまとめて一気に走らせて「何かに失敗したら全部ロールバックできる便利な機能」位しか理解できていません。
仕組みが良く分かっていないので今勉強中です。

2人から同じご指摘いただいているので、普通はテーブルロックで行うって事ですよね。。。
ちょっとそちらも勉強して理解を深めようと思います。

進捗があったらまた書き込ませていただきます。

493 :デフォルトの名無しさん:2016/09/02(金) 11:22:48.43 ID:GozEyCoO
>>492
なんか話が変わってきているが、>>469に沿って言えば、Z.Xにユニーク制約を付けるのが「普通」。
あと、トランザクションの大小は関係ない。
3msで終了する「存在チェック→insert」というトランザクションでも、複数人が実行するのなら競合する可能性はある。

494 :デフォルトの名無しさん:2016/09/02(金) 22:39:01.72 ID:JARk4f24
>>492
トランザクションを勉強するのはいいが、ロックのことは一旦忘れた方がいい。理解の妨げになる。
明示的にロックを「使う」なんて言うのはトランザクション分離レベルを理解できなかったジジイのやること。

495 :デフォルトの名無しさん:2016/09/05(月) 11:48:06.49 ID:Q7D4v3jm
トランザクション分離レベルのことがわかっていると、今回のケースでテーブルロックを使わなくてもいいってことか?

496 :デフォルトの名無しさん:2016/09/05(月) 20:21:03.85 ID:EI9/AJWb
今回のケースに限らず、基本的にロックなんて使う必要ない。そもそも標準SQLにロックなんてないしな。
必要があるとすれば、SQL92のトランザクション対応してない古いシステムでどうしてもやらないと
ならない場合とか、全部わかってる人があえて標準じゃできない使い方をする場合くらい。

497 :デフォルトの名無しさん:2016/09/06(火) 03:41:01.52 ID:XjpGsw+e
>>494-495
ロックってのは基本的には分離レベルに応じてDBMSが勝手にやってくれる
今回の例ならSERIALIZABLEでトランザクション流せば良いだけ

理想は分離レベルの指定だけで済ますことなんだが
現実的には、どの分離レベルでどういうSQL流したらどういうロックが獲得されるかはちゃんと理解しとかないと
パフォーマンス的な問題がでるかもしれんがな

498 :デフォルトの名無しさん:2016/09/06(火) 07:48:18.17 ID:4rtM9TBt
>理想は分離レベルの指定だけで済ますことなんだが
>現実的には、どの分離レベルでどういうSQL流したらどういうロックが獲得されるかはちゃんと理解しとかないと

それは別に相反する話じゃないが。

499 :デフォルトの名無しさん:2016/09/06(火) 11:27:23.34 ID:JNt9wvm4
>>497
> 今回の例ならSERIALIZABLEでトランザクション流せば良いだけ
同じテーブルに同時に別のデータをINSERTすることがないという限定条件付きだけどな。

普通は、同じテーブルに同時に別のデータをINSERTすることもあるし、同時に同じデータをINSERTすることもある。
で、同時に同じデータをINSERTされないようにするには、普通はunique制限を付ける。
なんらかの理由でunique制限を付けられない場合は、論理的にはテーブルをロックするしかない。

その「テーブルをロックする」というのが、MySQLで上の限定条件に限り、目的と合致するというだけの話。

500 :デフォルトの名無しさん:2016/09/06(火) 20:19:05.08 ID:XjpGsw+e
>>499
お前の言う限定条件ってのは理解できない
だれかに言われてたけど、トランザクションは常に失敗の可能性があるってことすら理解してないのか?
あるいは同時実行されるトランザクションが複数あれば、ロック待ちが発生する可能性があるって事が理解できない?
>>論理的にはテーブルをロックするしかない
だから、SERIALIZABLEなトランザクションってのは必要ならそう言う動作するわけだが
MySQLどうこうじゃなくて、SERIALIZABLEを正しく実装してる全てのDBMSで正しく動作するけど?

MySQLがトランザクションとSERIALIZABLE分離レベルを正しく実装してるかどうかはしらん

501 :デフォルトの名無しさん:2016/09/06(火) 20:56:58.82 ID:4rtM9TBt
ロックロック言う奴はやっぱりトランザクション分離レベルが理解できてないという好例>>499

502 :デフォルトの名無しさん:2016/09/07(水) 03:06:30.86 ID:09Xqd2ts
>>477がちょっと気になったんだが
本当に先行トランザクションのuser1のinsertがブロックされたり
user2が(ロックタイムアウトじゃなくて)デッドロックで落ちたりするのか?

それがホントなら誰かMySqlのロック周りについて詳しい解説サイト教えてくれ

503 :デフォルトの名無しさん:2016/09/07(水) 03:09:09.50 ID:09Xqd2ts
うは、なんか文字化けしとる
MySqlのロック周りについて詳しい解説サイト教えてくれ
と書いたんだが、さて

504 :デフォルトの名無しさん:2016/09/07(水) 10:18:08.32 ID:99igoHFu
>>500
まず、俺がトランザクションについて理解していないとか、分離レベルについて理解していないとか、
そういう思い込みを捨てろ。俺に言わせれば、お前の方が理解していないように見えるんだが。

> MySQLどうこうじゃなくて、SERIALIZABLEを正しく実装してる全てのDBMSで正しく動作するけど?
いや、serializableなトランザクションに関する各RDBMSの実装が異なっているというのが前提で、
だからこそ「serializableなトランザクションを使えばうまくいく」という一般論にはならない。
なので、「MySQLならこういう限定条件であればserializableなトランザクションを使えば良い」という
ようにしか言えない。

> >>477がちょっと気になったんだが
> 本当に先行トランザクションのuser1のinsertがブロックされたり
> user2が(ロックタイムアウトじゃなくて)デッドロックで落ちたりするのか?
いやいや、実行結果って書いたじゃん。実際に自分でもやってみたら?

> それがホントなら誰かMySqlのロック周りについて詳しい解説サイト教えてくれ
「mysql serializable」でググった1ページ目には、その「詳しい解説」は見つからなかったのか?

505 :デフォルトの名無しさん:2016/09/07(水) 10:40:31.01 ID:99igoHFu
PostgreSQLでもやってみた。

user1: begin transaction isolation level serializable;
user1: select count(*) from t where a=3; -> データがないことを確認できる
user2: set tx_isolation = serializable;
user2: begin transaction isolation level serializable;
user2: select count(*) from t where a=4; -> データがないことを確認できる
user1: insert into t values(3, 300); -> insertは完了する
user2: insert into t values(4, 400); -> insertは完了する
user1: select count(*) from t; -> 1
user2: select count(*) from t; -> 1
user1: commit; -> 成功する
user2: commit; -> エラー発生
> ERROR: トランザクション間で read/write の依存性があったため、アクセスの直列化ができませんでした
> DETAIL: Reason code: Canceled on identification as a pivot, during commit attempt.
> HINT: リトライが行われた場合、このトランザクションは成功するかもしれません

506 :デフォルトの名無しさん:2016/09/07(水) 10:42:56.92 ID:99igoHFu
各RDBMSがserializableなトランザクションの実装で保証するのは「ファントムリードがないこと」であって、
それを実現する方法は各RDBMSの実装にまかされている。

507 :デフォルトの名無しさん:2016/09/07(水) 10:43:58.68 ID:99igoHFu
訂正:
>>505
> user2: set tx_isolation = serializable;
は削除し忘れ。

508 :デフォルトの名無しさん:2016/09/07(水) 11:58:09.82 ID:99igoHFu
少し解説を加えると、RDBMSはserializableなトランザクション内の文脈を見て成功・失敗を決めているわけではなく、
ただ単にファントムリードが発生しないような実装にしているだけ。

あと、ロックと処理がブロックするというのは別の話。
ファントムリードを防ぐという目的の場合に、read lock対read lockなら処理はブロックしないという実装もありだし、
read lock対read lockでも処理をブロックするという実装もありえる。

またserializableなトランザクションの場合、リトライすればOKな場合がある。
そもそも、トランザクションが重ならなければお互いOKになる場合ね。
そういうケースでは、SQL CODEの内容からリトライ可能かどうかを判定してリトライするという実装が必要。
もちろん1回だけのリトライではまた他のトランザクションと重なる場合があるので、MAX回数を決めてリトライを
続ける必要がある。

そういう面倒くさいことをしてまでも、ファントムリードを防がなければならないケースに限って、トランザクションを
serializableにするというのが正しい使いだと思う。
ユニーク性を担保したいだけだったら、テーブルロックで十分。

509 :デフォルトの名無しさん:2016/09/07(水) 15:28:03.69 ID:SHvl642M
テーブルロックは常に成功するとでも思ってるんだろうか

510 :デフォルトの名無しさん:2016/09/07(水) 15:44:40.75 ID:99igoHFu
>>509
デッドロックになるようなロックのかけ方すればエラーになるだろうけど、それと今回の話とは関係ないよね。

511 :デフォルトの名無しさん:2016/09/07(水) 19:16:59.25 ID:09Xqd2ts
デッドロックとロックタイムアウトの区別もつかない人か

まあserializableで単独テーブルに対するアクセスでデッドロックするのもどうなんだという感じがしないでもないが
それでも少なくとも2重登録の防止って要件はserializableで満たしてるわけだが

同時実行する他のトランザクションがエラーになるのはダメとか、それは分離レベルが保証することではないし
リトライすればOKな事もあるとか、もはや分離レベル関係ないし

512 :デフォルトの名無しさん:2016/09/07(水) 22:23:54.80 ID:fjXPLH9h
>いや、serializableなトランザクションに関する各RDBMSの実装が異なっているというのが前提で、
>だからこそ「serializableなトランザクションを使えばうまくいく」という一般論にはならない。

この時点で理解してないのは明らか。そもそもSERIALIZABLEは無条件に直列化可能で
あることを保証するものだし。

>各RDBMSがserializableなトランザクションの実装で保証するのは「ファントムリードがないこと」であって、
>それを実現する方法は各RDBMSの実装にまかされている。

ファントムリードが起きない「だけ」なんだが、直列化可能性を保証するにはそれで十分なわけ。
まさか「ファントムリードがない」ってのを、単に他トランザクションで挿入したレコードを
見せないだけとでも思ってるんだろうか。

513 :デフォルトの名無しさん:2016/09/08(木) 10:04:35.37 ID:uHWEQ8CC
>>511
もうお前の主張にはなにも興味はないが、mysqlとpostgresqlの実装にたいする感想くらいくれよ。

514 :デフォルトの名無しさん:2016/09/08(木) 10:09:10.39 ID:uHWEQ8CC
>>511
> まあserializableで単独テーブルに対するアクセスでデッドロックするのもどうなんだという感じがしないでもないが
あ、これがmysqlの実装に対する感想なのか?
じゃ、もういいや。

515 :デフォルトの名無しさん:2016/09/08(木) 10:14:11.58 ID:uHWEQ8CC
最後に一つだけ。
「SERIALIZABLEは無条件に直列化可能であることを保証するもの」の意味が全然わからんが、
ユニーク性を担保するためには、同時に実行される可能性があるトランザクションを「直列化」する
必要があり、それにはテーブルロックを使うのが最も簡単。

これに反論がある場合に限ってレスしてくれ。

516 :デフォルトの名無しさん:2016/09/08(木) 11:18:11.85 ID:uHWEQ8CC
>>515への直接のレスがなければ、これでserializable話は終了します。
いい加減うざいだろうし。

「serializableなトランザクションとは何か」は、以下のスライドが俺が見つけた範囲だと一番わかりやすいと思う(それでもわかりづらいんだが)。
『トランザクションをSerializableにする4つの方法』
http://www.slideshare.net/kumagi/serializable4-56309007

517 :デフォルトの名無しさん:2016/09/08(木) 21:47:43.84 ID:8O2pDGJY
「SERIALIZABLEじゃ無理」→「問題がある」→「ロックの方が簡単」

なんだかなぁw
普通はトランザクション開始時に隔離レベルを1行指定する方がいちいちテーブルを指定して
ロックをかけるより簡単だと思うんだが。

「(今からトランザクションを理解するより)ロックの方が簡単」という個人的事情なのかね?

518 :デフォルトの名無しさん:2016/09/09(金) 03:27:30.69 ID:VuAPiSR8
>>517
ロックの詳細や問題点を正確に把握できてないんじゃないの

>serializableなトランザクションの場合、リトライすればOKな場合がある
>そういう面倒くさいことをしてまでも、ファントムリードを防がなければならないケースに限って、トランザクションを
> serializableにするというのが正しい使いだと思う。
と、あたかも自分でテーブルロックすれば他のトランザクションやリトライ系については考慮いらないかのようなこと言ってるし

>テーブルロックは常に成功するとでも思ってるんだろうか
っていう突っ込みに対して
>デッドロックになるようなロックのかけ方すればエラーになるだろうけど
って回答してるし
>デッドロックとロックタイムアウトの区別もつかない人か
についてはまともな反論してないからな

デッドロック以外にロックでエラーは出ないと思ってるんだろ

519 :デフォルトの名無しさん:2016/09/24(土) 11:55:19.93 ID:B225F1SQ
再利用性の高いクエリの書き方を教えてください

520 :デフォルトの名無しさん:2016/12/04(日) 21:38:58.08 ID:OeUSkEhR
Oracleってdomain使えないん?

521 :デフォルトの名無しさん:2016/12/06(火) 22:37:42.39 ID:ZdJwFyPe
今どきRDBMSとかダサすぎ。

522 :デフォルトの名無しさん:2016/12/15(木) 15:36:13.98 ID:7KRIzock
https://chrome.google.com/webstore/detail/%E3%81%AF%E3%81%A6%E3%81%AAng/mbgdnfmdelffjdhkdggilmphfdihnmcj?hl=ja

138 KB
新着レスの表示

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50
名前: E-mail (省略可) :


read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)